私はのDTOとしてオブジェクトを受信していると私は、ビュー・モデルに変換していたプロジェクトを持っています。この変換を行うために、DTOプロパティからView-Modelsに変換するためにいくつかの計算を行うカスタムコンバータを作成することにしました。これらのすべては準備ができていた、と変換が働いていた後、私は(私はこれがTDDを尊重していない知っているが、これは私がやって管理するものである)、それはより安定にするために変換するためにいくつかのユニットテストを追加したいです。私はビューモデルのいずれもEquals
メソッドを定義していない、と彼らは基準と同等になることはありませんのでテストは2ビュー・モデルユニットテストで2つのオブジェクトの等価性をテストする方法は?
Assert.AreEqual(expected, actual);
の平等を確認したいとき
問題が来ます。
Equals
メソッドを定義するには:私が考えたし、これらのオブジェクトを比較することが判明いくつかのアプローチがあります。しかし、それを定義するのがよいのかどうかは、テスト目的のためだけにはわかりません。私が定義した場合、GetHashCode
メソッドも定義することをお勧めします。だから、この解決策が最高だとは感じません。もう一つの可能性は、テストプロジェクトで
IEqualityComparer<T>
を実装し、メインの変換プロジェクトから比較ロジックを分離したり、これを第3のプロジェクトに抽出したりして、変換モジュールが将来必要に応じて使用できるようにすることです。この実装はうまくいくようですが、テストする必要があるクラスがたくさんある別のプロジェクトを追加する価値があるかどうかはわかりません。私がStack Overflow questionで見つけた3番目のアプローチは興味深いようですが、両方のオブジェクトをシリアル化して文字列を比較することです。問題は、これがプログラミングの良い習慣であるかどうかわかりません。
オブジェクトの比較に最適な方法はどれですか?より効率的なアプローチがいくつかありますか?
注:ビュー・モデルは、複雑なオブジェクトである、と私は他の技術への変換の方法を変更することはできません。
同じ種類のものでなければ、逐次化は信頼できません。同じプロパティを持つ2つの型が別々にシリアル化できる理由はたくさんあります。 –
@DStanleyこれらは常に同じ型です。つまり、現時点では見えますが、ジェネリック型のパラメータを持つメソッドを、両方のオブジェクトを受け取る '単純な比較 'ではなく' Equality'からそれを直列化して文字列比較を返しますか?この方法では十分に安定していますか? – meJustAndrew
@Dスタンリーあなたがこの質問を閉じるのに投票したのは広すぎると思うが、ヘルプセンターを読んで広すぎるということを意味している。本の穴の内容を傷つけることを必要とするか、本当に長い答えでさえ必要としない。多くの他のプログラミングの質問が複数の答えを持つことができると考えてください。良いものはありますが、どれも*広すぎる*。ありがとうございました! – meJustAndrew