如何在单元测试中断言(如果有的话)重复项?
How to assert (if there are any) duplicates in unit tests?
我知道
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!");
查看不同值的数量(toShuffle.Distinct().Count())
并验证是否与初始数量相同。
我还建议您使用正确的断言方法,而不是到处使用 Assert.IsTrue()
。
使用FluentAssertions(我强烈推荐),你可以:
toShuffle.Should().OnlyHaveUniqueItems();
但是,我实际上会像这样重写你的测试:
//Arrange
var original = new List<int>{1001,1002,1003,1004,1005,1006,1007,1008,1009,1010};
//Act
var shuffled = Shared_Components.SharedComponents.Shuffle(original , 10);
//Assert
shuffled.Should().BeEquivalentTo(original)
.And.NotBeAscendingInOrder();
测试的目的现在更容易理解了。
也许我的解释不够好and/or这个例子不合适。
我是这样解决的:
///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 之间必须至少有一个重复。
以下是在 NUnit 中的实现方法(使用较新的断言表示法):
Assert.That(toShuffle, Is.Unique);
我知道
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!");
查看不同值的数量(toShuffle.Distinct().Count())
并验证是否与初始数量相同。
我还建议您使用正确的断言方法,而不是到处使用 Assert.IsTrue()
。
使用FluentAssertions(我强烈推荐),你可以:
toShuffle.Should().OnlyHaveUniqueItems();
但是,我实际上会像这样重写你的测试:
//Arrange
var original = new List<int>{1001,1002,1003,1004,1005,1006,1007,1008,1009,1010};
//Act
var shuffled = Shared_Components.SharedComponents.Shuffle(original , 10);
//Assert
shuffled.Should().BeEquivalentTo(original)
.And.NotBeAscendingInOrder();
测试的目的现在更容易理解了。
也许我的解释不够好and/or这个例子不合适。
我是这样解决的:
///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 之间必须至少有一个重复。
以下是在 NUnit 中的实现方法(使用较新的断言表示法):
Assert.That(toShuffle, Is.Unique);