如何在unit testing中比较列表

这个testing如何失败?

[TestMethod] public void Get_Code() { var expected = new List<int>(); expected.Add(100); expected.Add(400); expected.Add(200); expected.Add(900); expected.Add(2300); expected.Add(1900); var actual = new List<int>(); actual.Add(100); actual.Add(400); actual.Add(200); actual.Add(900); actual.Add(2300); actual.Add(1900); Assert.AreEqual(expected, actual); //AreSame(expected, actual) and IsTrue(expected.Equals(actual)) fails too } 

要对集合进行断言,您应该使用CollectionAssert

 CollectionAssert.AreEqual(expected, actual); 

List<T>不会覆盖Equals ,所以如果Assert.AreEqual只是调用Equals ,它将最终使用引用相等。

我想这会有所帮助

 Assert.IsTrue(expected.SequenceEqual(actual)); 

我在这个线程中尝试了其他的答案,他们没有为我工作,我正在比较具有相同值存储在其属性中的对象的集合,但对象是不同的。

方法调用:

 CompareIEnumerable(to, emailDeserialized.ToIndividual, (x, y) => x.ToName == y.ToName && x.ToEmailAddress == y.ToEmailAddress); 

比较方法:

 private static void CompareIEnumerable<T>(IEnumerable<T> one, IEnumerable<T> two, Func<T, T, bool> comparisonFunction) { var oneArray = one as T[] ?? one.ToArray(); var twoArray = two as T[] ?? two.ToArray(); if (oneArray.Length != twoArray.Length) { Assert.Fail("Collections are not same length"); } for (int i = 0; i < oneArray.Length; i++) { var isEqual = comparisonFunction(oneArray[i], twoArray[i]); Assert.IsTrue(isEqual); } } 

这个testing比较一个dateinput,检查它是否是一个闰年,如果是的话,从inputdate输出20个闰年,如果不是,则输出NEXT 20个闰年,myTest.Testing指的是myTest实例,从一个名为Testing的List包含所需的计算值。 我不得不做的一部分练习。

 [TestMethod] public void TestMethod1() { int testVal = 2012; TestClass myTest = new TestClass(); var expected = new List<int>(); expected.Add(2012); expected.Add(2016); expected.Add(2020); expected.Add(2024); expected.Add(2028); expected.Add(2032); expected.Add(2036); expected.Add(2040); expected.Add(2044); expected.Add(2048); expected.Add(2052); expected.Add(2056); expected.Add(2060); expected.Add(2064); expected.Add(2068); expected.Add(2072); expected.Add(2076); expected.Add(2080); expected.Add(2084); expected.Add(2088); var actual = myTest.Testing(2012); CollectionAssert.AreEqual(expected, actual); } 

如果你想检查每个包含相同的值的集合,那么你应该使用:

 CollectionAssert.AreEquivalent(expected, actual); 

编辑:

“两个集合是相同的,如果它们具有相同数量的相同元素,但是以任何顺序排列。如果它们的值相等,则元素相等,而不是如果它们指向相同的对象。 – https://msdn.microsoft.com/en-us/library/ms243779.aspx