반응형
Visual Studio 2008 테스트 프레임 워크에서 배열이 동일한 지 확인
두 배열이 동일한 지 (즉, 동일한 수의 요소가 있고 각 요소가 동일한 지) 단위 테스트에서 쉽게 확인할 수있는 방법이 있습니까?
Java에서는을 사용 assertArrayEquals (foo, bar);
하지만 C #에 해당하는 것은없는 것 같습니다. 시도 Assert.AreEqual(new string[]{"a", "b"}, MyFunc("ab"));
했지만 함수가 "a", "b"가있는 배열을 반환하더라도 검사는 여전히 실패합니다.
이것은 기본 제공 단위 테스트 프레임 워크와 함께 Visual Studio 2008 Team Suite를 사용합니다.
그것은 CollectionAssert에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");
}
테스트 성공, 오류 발견 :
CollectionAssert.AreEqual failed. (Element at index 3 do not match.)
.NET 3.5에서는 고려할 Assert.IsTrue(foo.SequenceEqual(bar));
수 있습니다.하지만 어떤 인덱스가 다른지 알려주지는 않습니다.
Ok 여기에 약간 더 긴 방법이 있습니다 ...
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;
}
반응형
'Nice programing' 카테고리의 다른 글
C# debugging: [DebuggerDisplay] or ToString()? (0) | 2020.10.10 |
---|---|
두 데이터베이스 간의 MySQL 데이터베이스 동기화 (0) | 2020.10.10 |
내 Linux C ++ 프로그램에서 코어 덤프를 활성화하는 방법 (0) | 2020.10.09 |
외래 키로 복합 키 (0) | 2020.10.09 |
grep 출력에 파일 이름 및 줄 번호 표시 (0) | 2020.10.09 |