2010-06-06 3 views
1
내가 예를 들어 테스트 할

은 MS 테스트는 기본 값이 비교 같다 제공합니까?

분명히 내가 여기에 값 비교가 필요하지만 재정의가 순수하게 테스트를 위해 내 모든 클래스에 대한 구현 같음 제공해야하고 싶지 않은
int orderId = myRepository.SubmitOrder(orderA); 

orderB = myRepository.GetOrder(orderId); 

Assert.AreEqual(orderA, orderB); // fail 

(를 응용 프로그램의 나머지 부분에서 사용되지 않을 것입니다).

단지 반사를 사용하여 모든 필드를 확인하는 제공하는 일반적인 방법이 있습니까? 그렇지 않다면, 내 자신의 것을 쓸 수 있습니까?

편집 : 사람들이 그런 점을 놓치고있는 것 같습니다. 나는 내 자신의 비교 논리를 쓰고 싶지 않다. 수백 줄의 추가 코드가 필요합니다. 어떤이는 표시되지 않습니다 때문에 : 나는 반복적으로 T.에

멀어져 편집 모든 값을 끌어 반사를 사용하는 일반적인

bool ContainSameValues<T>(T t1, T t2)

방법처럼 뭔가를 찾고 있어요 이런 식으로 지원하기 위해 빌드 된 내 자신의 쓰기 시도 (실패한) 볼 수 내 here

답변

1

가장 쉬운 것은 "원시"필드를 직접 비교입니다. 그러나 사용자 정의 어설 션을 수행 할 수있는 Assert 클래스의 래퍼를 만드는 것이 좋습니다.

예컨대 :

public static class MyAssertions 
{ 
    public static void AreOrdersEqual(Order a, Order b) 
    { 
     if (!OrdersAreEqual) // your comparison logic here 
      Assert.Fail("Orders arent equal");   
    } 
} 

그런 다음 테스트 :

MyAssertions.AreOrdersEqual(orderA, orderB) 
+0

내가 그 실용적하는 너무 많은 분야에 너무 많은 종류가 있습니다. – fearofawhackplanet

-2

Order 클래스 메서드에서 IComparable (또는 ICompare?)을 구현해야합니다. Assert 클래스는 정적

Assert.AreEqual(orderA.ID, orderB.ID);  
Assert.AreEqual(orderA.CustomerID, orderB.CustomerID); 
Assert.AreEqual(orderA.OrderDate, orderB.OrderDate); 
0

으로는 (인스턴스가 필요로) 그것을 확장 메서드를 작성하는 것은 불가능합니다 : 할