在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框架。

4 Solutions collect form web for “在Visual Studio 2008testing框架中声明数组是平等的”

它是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; } 
  • 该安装不支持该项目types
  • 以下模块是在启用优化或者没有debugging信息的情况下构build的
  • 如何将默认浏览器更改为在Visual Studio 2008中进行debugging?
  • Visual Studio中大型解决scheme的最佳实践(2008)
  • Visual Studio - 如何更改项目的文件夹名称和解决scheme名称w / o中断解决scheme
  • Visual Studio:多个后期构build命令?
  • 我应该如何检测大型C ++项目中不必要的#include文件?
  • 如何自动删除Visual Studio 2008中的尾随空白?
  • 确定绑定到事件的事件处理程序的列表
  • 为什么C#编译器不是静态方法调用实例方法的错误代码?
  • 如何停止Visual Studio从“总是”检查解决scheme文件?