2011-07-06 3 views

답변

4

POCO가 Equals을 적절한 방식으로 덮어 씁니까? 그렇지 않다면 그것은 문제입니다. EqualsGetHashCode을 무시하면 문제가 없습니다.

평등이라는 개념이 하나만 있다고 가정합니다. 또 다른 방법은 IEqualityComparer<T>을 다른 클래스에 구현하여 사용하는 것입니다. (Assert.AreEqual이 선택 사항 인 IEqualityComparer<T> 매개 변수를 사용하는지 여부는 모르지만 명시 적으로 항상 호출 할 수 있습니다.)

2

expected objects library을 살펴볼 수 있습니다. 매우 정교하고 모든 뒤에서 비교 로직을 처리하여 코드를 훨씬 쉽고 가볍게 만듭니다. 유형을 무시하도록 말할 수도 있습니다. 따라서 객체의 몇 가지 속성을 확인하고 싶다면 객체와 비교할 수 있습니다.

+0

이것은 옵션 일 수 있지만, 프레임 워크에서 많은 메소드와 클래스를 사용할 때 객체가 동일하다고 생각할 수 있으므로주의해야합니다. . 즉, 객체가 여전히 콜렉션의 일부로 간주되지 않을 것입니다. 이것은 체크를 수행하기 위해 'Equals'를 사용할 것이기 때문입니다. 그리고 이것이 OP의 'Assert.AreEqual' 사용에 대해서는 다루지 않을 것이라고 생각합니까? ExpectedObject에서 어설 션을 사용해야합니다. 내가 뭔가를 오해하고있는 것이 아니라면 ... –

+0

@ 샘, 무슨 뜻인지 모르겠다. 이 예상 객체 라이브러리는 프로덕션 코드에서는 사용되지 않지만 단위 테스트에서만 사용되므로 실제 평등이 중요하지 않으므로 테스트에서받은 객체가 예상 한 것임을 확인하는 것이 사용됩니다 . 모든 분야가 동등하다고 기대하든, 또는 일부 분야가 당신에게 달려 있는지를 신경 써야합니다. 테스트에서 객체의 평등을 검사하는 유일한 목적을 가진 코드가있는 poco와 같은 단순한 것을 망칠 때 감각을 보지 못합니다. –

+0

OP가 'Assert.Equal'을 사용하여 생성 한 두 객체가 실제로 같으면 객체가 예상했던 것과 다른지 확인합니다. 예상 객체는 테스트를 단순화하는 데 도움이 될 수 있지만 테스트의 ** 점 **이 동일한 값을 갖는 두 객체를 만들고 서로 동일하다고 간주되는지 확인하는 것이 전혀 도움이되지 않습니다. 첫 번째 값을 확인하기 위해 두 번째 개체를 만드는 경우이 값을 볼 수는 있지만 OP 질문에서 명확하지 않습니다. 나는이 구별을 명확하게하고 싶었다. –

2

개체가이 아니기 때문에 테스트에 실패했습니다. 자기들의 들판에서 같은 값을 가질 수도 있지만, 이것이 동일하지는 않습니다. 기본적으로 객체는 동일한 주소를 가지기 때문에 동일한 객체입니다.

원하는 동작 (동일한 값을 가진 속성을 가진 개체를 동일하게 만들기 위해)을 얻으려면 Equals을 재정의하고 개체를 동일하게 만드는 것이 무엇인지 정의해야합니다. 이것이 모두 속성이면 여기에서 모든 속성을 확인하십시오. 그것이 단지 일부인 경우에만 확인하십시오. 당신의 맥락에서 평등을 결정하기 위해해야 ​​할 일을하십시오.

Equals을 재정의하는 경우 GetHashCode도 무시하고 Equals이 두 개의 개체에 대해 true 일 때 GetHashCode이 둘 모두에 대해 동일한 값을 반환하는지 확인해야합니다.

관련 문제