如何在单元测试中断言(如果有的话)重复?

时间:2015-05-06 15:14:01

标签: c# linq list unit-testing stub

我知道

Assert.IsFalse(postsPageOne.Intersect(postsPageTwo).Any());

您可以与对象进行比较以查找任何重复项。

但是我想在我的方法中使用它之后检查我的列表是否包含重复项。这是测试代码:

///ARRANGE
///
var toShuffle = new List<int>(){
    1001,
    1002,
    1003,
    1004,
    1005,
    1006,
    1007,
    1008,
    1009,
    1010
};

///ACT
///
toShuffle = Shared_Components.SharedComponents.Shuffle(toShuffle, 10);

///ASSERT
///
Assert.IsTrue(toShuffle.Count == 10, "Number of Elements not correct!");
Assert.IsTrue(toShuffle.All(a => a >= 1001 && a <= 1010), "Elements out of range!");

3 个答案:

答案 0 :(得分:5)

查看不同值的数量(toShuffle.Distinct().Count()),并验证该值与初始数量相同。

我还建议您使用正确的断言方法,而不是在任何地方使用Assert.IsTrue()

答案 1 :(得分:5)

使用FluentAssertions(我高度推荐),你可以这样做:

  std::string a_value = "abcd";
  std::cout << a_value.at(2);

但是,我实际上是这样重写你的测试:

toShuffle.Should().OnlyHaveUniqueItems();

现在更容易理解测试的目的。

答案 2 :(得分:0)

也许我的解释不够好和/或示例不合适。

以下是我解决它的方法:

///ARRANGE
///
var toShuffle = new List<int>(){1001, 1002,1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010};
var expected = new List<int>() { 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010 };

///ACT
///
toShuffle = Shared_Components.SharedComponents.Shuffle(toShuffle, 10);

///ASSERT
///
Assert.AreEqual(10, toShuffle.Count, "Number of Elements wrong!");
Assert.IsTrue(toShuffle.All(a => a >= 1001 && a <= 1010), "Elements out of range!");

//to check if there are any duplicates
toShuffle.Sort();
CollectionAssert.AreEqual(expected, toShuffle, "Duplicates found!");

如果前两个断言为真且最后一个断言失败,那么在1001 - 1010之间必须至少有一个副本。