4

私はクラスを持っています。それを と呼びましょうFoo。これは値型であり、したがってEquals/GetHashCode()メソッドをオーバーライドします。別のテスト フィクスチャで、同等性のために使用されるプロパティだけでなく、Foo のすべてのプロパティが適切に設定されていることを確認したいと思います。このため、私のテスト アサーションShouldBeEquivalentToでは、「オブジェクトのタイプに関係なく、両方のオブジェクト グラフに同じ値を持つ同じ名前のプロパティがある」場合に、ドキュメントが示唆するメソッドを具体的に使用します。

ただし、メソッドをShouldBeEquivalentTo呼び出し、真の結果を取得してから、約束Foo.Equalsされたリフレクション ベースのプロパティ マッチングを短絡するように見えます。ShouldBeEquivalentTo

これは予想される動作ですか?そうである場合、FA ソースを調べたところ、この動作を変更する簡単な方法は見つかりませんでした (IEquivalencyStepは内部で宣言されています)。これを回避する他の方法はありますか?

編集: Dennis: はい、比較している 2 つのオブジェクトは同じタイプです。要約すると、私はクラス Foo をオーバーライドEquals しましたが、FA がこの等価概念を単体テストに使用することを望んでいません。

4

1 に答える 1

0

この関数の動作を変更することはできないと思います。オーバーライドする場合は、Equals比較を同じようにする必要があると想定しています。次の機能を試すことができます。

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

NativeEqualsまたは、を呼び出すFooクラスメソッドに実装し、base.Equals()このメソッドを明示的に使用して比較することもできます。これは、値型に最適です。

于 2013-01-09T15:52:54.823 に答える