在Visual Studio 2008testing框架中声明数组是平等的

有一个简单的方法来检查一个unit testing,两个数组是否相等(也就是说,有相同数量的元素,每个元素是相同的?)。

在Java中,我会使用assertArrayEquals (foo, bar); ,但似乎没有相当于C#。 我尝试了Assert.AreEqual(new string[]{"a", "b"}, MyFunc("ab")); ,但即使该函数返回一个数组“a”,“b”检查仍然失败

这是使用Visual Studio 2008 Team Suite和内置的unit testing框架。

它是CollectionAssert.AreEqual ,另请参阅CollectionAssert.AreEqual的文档 。

将Class1.cs:

 namespace ClassLibrary1 { public class Class1 { Array arr1 = new[] { 1, 2, 3, 4, 5 }; public Array getArray() { return arr1; } } } 

ArrayEqualTest.cs:

 [TestMethod()] public void getArrayTest() { Class1 target = new Class1(); Array expected = new []{1,2,3,4,5}; Array actual; actual = target.getArray(); CollectionAssert.AreEqual(expected, actual); //Assert.IsTrue(expected.S actual, "is the test results"); } 

testing成功,发现错误:

 CollectionAssert.AreEqual failed. (Element at index 3 do not match.) 

在.NET 3.5中,可能考虑Assert.IsTrue(foo.SequenceEqual(bar)); – 它不会告诉你它在不同的索引上。

好吧,这是一个稍微长一点的做法…

 static void Main(string[] args) { var arr1 = new[] { 1, 2, 3, 4, 5 }; var arr2 = new[] { 1, 2, 4, 4, 5 }; Console.WriteLine("Arrays are equal: {0}", equals(arr1, arr2)); } private static bool equals(IEnumerable arr1, IEnumerable arr2) { var enumerable1 = arr1.OfType<object>(); var enumerable2 = arr2.OfType<object>(); if (enumerable1.Count() != enumerable2.Count()) return false; var iter1 = enumerable1.GetEnumerator(); var iter2 = enumerable2.GetEnumerator(); while (iter1.MoveNext() && iter2.MoveNext()) { if (!iter1.Current.Equals(iter2.Current)) return false; } return true; }