를 사용하여 평등 객체의 테스트 컬렉션이 나는 쉽게 전화와 같은 사용하여 해당 개체의 IEnumerable
컬렉션을 비교할 수 있습니다 테스트있을 때 :내가 너무 <code>IEquatable<T></code>을 구현 만든 클래스가 IEquatable <T>
Assert.IsTrue(expected.SequenceEqual(actual));
을
이것은 현재 잘 작동하고 있지만 약간의 잔소리에 의혹이 있습니다. 클래스는 다음과 같습니다 다음 GetHashCode()
를 오버라이드 (override)의
public class ThirdPartyClaim : IEquatable<ThirdPartyClaim>
{
// fields removed for question
public bool Equals(ThirdPartyClaim compareTo)
{
if (object.ReferenceEquals(this, compareTo))
{
return true;
}
return this.ClaimId.Equals(compareTo.ClaimId) &&
this.Firstname.Equals(compareTo.Firstname) &&
this.Lastname.Equals(compareTo.Lastname);
}
public override int GetHashCode()
{
int hashClaimId = this.ClaimId == null ? 0 : this.ClaimId.GetHashCode();
int hashFirstname = this.Firstname == null ? 0 : this.Firstname.GetHashCode();
int hashLastname = this.Lastname == null ? 0 : this.Lastname.GetHashCode();
return hashClaimId^hashFirstname^hashLastname;
}
나의 이해는 클래스의 동일한 인스턴스를 가리키는 객체를 비교하는 데 사용된다는 점이다. 이 경우에 (심지어 미래에도) 이것이 요구되지는 않을 것입니다.
이 이해가 정확합니까? 그렇다면 안전하게 코드를 제거 할 수 있습니까?
단위 테스트에서 이러한 개체의 컬렉션을 비교하는 더 좋은 방법이 있습니까?
비록 MSTest를 사용하는 데 제약이 있습니다. 당신이 Equals
무시 그렇지 않으면 해시 기반 컨테이너가 제대로 작동하지 않을 때 GetHashCode
재정
Thans은
아니요, GetHashCode()는 모든 인스턴스의 해시 코드를 계산하는 데 사용됩니다. 'Equals'의 구현에 사용 된 필드는 해시 코드를 계산할 때도 사용해야합니다. –