在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; }