2013-01-09 2 views
3

클래스가 있습니다. Foo이라는 값 유형이므로 Equals/GetHashCode() 메서드를 재정의합니다. 별도의 테스트 픽스처에서 Foo의 모든 속성이 평등을 위해 사용 된 속성뿐만 아니라 적절하게 설정되었다고 주장하고 싶습니다. 이러한 이유로 내 테스트 단언문은 특별히 ShouldBeEquivalentTo 메서드를 사용합니다.이 설명서에서는 "두 개체 그래프 모두 해당 개체의 유형과 관계없이 동일한 값을 가진 속성의 이름이 동일한 경우"두 문서가 동일하다고 간주합니다.FluentAssertions : ShouldBeEquivalentTo 메서드는 여전히 Object.Equals()를 호출합니까?

그러나 ShouldBeEquivalentTo 메서드는 Foo.Equals 메서드를 호출하고 실제 결과를 얻은 다음 ShouldBeEquivalentTo 약속과 일치하는 반사 기반 속성을 단락 처리합니다.

이 예상되는 동작입니까? 그렇다면 FA 소스를 검사 할 때이 동작을 쉽게 변경할 방법이 없음을 알았습니다 (IEquivalencyStep은 내부로 선언되었습니다). 이 문제를 해결할 다른 방법이 있습니까?

편집 : 데니스 : 예, 제가 비교할 두 개체는 같은 유형입니다. 요약하면 Foo 클래스에서 Equals을 재정의했지만 FA가 내 단위 테스트에 평등이라는이 개념을 사용하는 것을 원하지 않습니다.

+0

나는 당신이하려는 것을 완전히 이해하지 못했습니다. 그 객체가 ShouldBeEquivalentTo()를 호출하고있는 객체와 비슷합니까? –

+2

나중에 참조하기 위해 Dennis는이 문제를 다음 주소로 해결했습니다. http://fluentassertions.codeplex.com/discussions/428950, 2.1에서 동작이 변경되었다고 말했습니다. – argaz

+0

Argaz, 답변으로 의견을 보내면 받아 들일 것입니다. –

답변

0

이 기능의 동작을 변경할 수 없다고 생각합니다. 동일한 방식으로 비교하기를 원하는 것보다 Equals을 재정의하면 가정합니다. 다음과 같은 기능을 시도 할 수 있습니다 :

dto.ShouldHave().SharedProperties().EqualTo(foo); 

을 아니면 base.Equals()를 호출합니다 푸 클래스 NativeEquals 방법으로 구현할 수 있습니다 후 비교를 위해 명시 적으로이 방법을 사용, 그것은 값 형식에 대해 잘 작동합니다.

+1

SharedProperties()가 ShouldBeEquivalentTo()와 동일한 엔진을 내부적으로 사용하기 때문에 작동하지 않습니다. 알아, 내가 설계했기 때문에 ... –

관련 문제