8

を使用して2つのリストを比較しようとしています

 CollectionAssert.AreEqual(ListExpected, ListActual);

しかし、私は例外を取得しています

Expected and actual are both <System.Collections.Generic.List`1[API.Program.Relation]> with 11 elements
  Values differ at index [0]
  Expected: <API.Program.Relation>
  But was:  <API.Program.Relation>

しかし、Assert.AreEqualフィールドごとにゼロ要素を使用して比較したところ、すべて問題ありませんでした。

使用して比較できない理由 CollectionAssert

4

1 に答える 1

11

Equals(object other)オブジェクトは、そのメソッドがtrueを返す場合、.NET内の別のオブジェクトと同じように「宣言」されます。そのメソッドをクラスに実装する必要がありますAPI.Program.Relation。そうしないと、参照が等しい場合を除いて、.NETはオブジェクトを異なるものと見なします。すべてのフィールドが同じであるという事実は、.NETにとって重要ではありません。フィールドごとの同等性セマンティクスが必要な場合は、Equalsそれをサポートする実装を提供する必要があります。

オーバーライドするときはEquals、オーバーライドすることも忘れないでくださいGetHashCode。これらは一緒にオーバーライドする必要があります。

Equals何らかの理由でオーバーライドしたくない、またはオーバーライドできない場合は、のオーバーロードをCollectionAssert.AreEqualIComparer使用して、コレクション要素の比較を支援するためのインスタンスを取得できます。

于 2012-04-20T18:49:28.527 に答える