2009-07-24 2 views
13

예상 결과 개체의 속성을 사용하여 결과 개체의 모든 속성이 동일한 지 확인함으로써 메서드의 결과를 테스트한다고 가정 해 보겠습니다. 우리는 equals 메소드를 구현하고 Assert.AreEqual (expectedResult, actualResult)를 사용해야합니다 ...하지만 equals는 프로덕션 코드에서 다른 것을 의미 할 수 있습니다.단위 테스트에서 객체 평등을 유지하는 데 하나의 equals 메소드를 재정의해야합니까?

가장 좋은 방법은 무엇입니까? 오버라이드 (override)를 통해 개체의 평등을 주장

  • 모든 속성

답변

18

나는 하나의 사용 사용자 정의 주장의 평등을 주장하는 방법을

또는

  • 같습니다. 두 가지 주된 이유가 있습니다.

    • 테스트 문제를 생산에 적용하지 마십시오. 이는 테스트 방법에서 equals의 의미가 프로덕션 코드의 의미와 일치하지 않을 수 있음을 의미합니다.
    • 같음은 모든 테스트에 충분하지 않을 수 있습니다. 다른 테스트를 수행하려면 서로 다른 어설 션이 필요하므로 어쨌든 사용자 정의 어설 션을 사용하게 될 것입니다.
+0

당신이 옳다고 생각하지만, 테스트 대상의 속성이 테스트 내부에서 액세스 할 수없는 경우 어떻게해야합니까? 반사를 사용 하시겠습니까? –

3

나는이 문제가 표준 방식으로하는 일과 관련이 없다고 생각합니다. 귀하의 시험이 무엇으로 시험되고 있는지 생각해 보는 것이 중요합니다.

모든 속성이 동일한 지 테스트하려는 경우 모든 속성이 동일한 지 확인하십시오.

전체 개체의 Equals 메서드의 반환 값을 테스트하려면 해당 값을 지정하십시오.

+0

+1 완전하고 단순하지만 절대적으로 정확합니다! –

4

값 개체 (예 : 통화 값 또는 튜플 또는지도)를 반환하는 메서드 또는 함수의 반환 값을 테스트하는 경우 결과 개체가 예상 결과 개체. 이 경우 equals의 표준 구현은 원하는 것을 수행해야합니다.

한편, 어떤 개체에서 뮤 테이터를 호출하고 개체가 예상대로 변형되었는지 확인하면 변경해야하는 개체의 속성 만 확인하는 것이 더 바람직하다고 생각합니다. 이렇게하면 equals에 대한 사용자 지정 정의를 수행하지 않아도되므로 테스트에서 예상했던 내용을 모호하게 만듭니다.