テスト時に、次のような呼び出しを使用してこれらのオブジェクトのコレクションをIEquatable<T>
簡単に比較できるように、実装したクラスがあります。IEnumerable
Assert.IsTrue(expected.SequenceEqual(actual));
これは現在うまく機能していますが、いくつかのしつこい疑問があります。クラスは次のようになります。
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;
}
をオーバーライドすることについての私の理解はGetHashCode()
、クラスの同じインスタンスを指すオブジェクトを比較するために使用されるということです。この機会にこれが必要になる可能性は非常に低いです (将来的にも)。
この理解は正しいですか? もしそうなら、コードを安全に削除できますか?
単体テストでこれらのオブジェクトのコレクションを比較するより良い方法はありますか?
私は MSTest を使用するように制約されていますが。
タンス