9

単体テストで流暢なアサーションを使用していますがShouldBeEquivalentTo、 、ShouldAllBeEquivalentTo、およびの使用BeEquivalentToは不明です。

例えば; 以下のステートメントはすべてパスするため、関数は同等に見えます。

List<string> a = new List<string>() { "james", "wood" };
List<string> b = new List<string>() { "james", "wood" };

a.ShouldBeEquivalentTo(b);
a.ShouldAllBeEquivalentTo(b);
a.Should().BeEquivalentTo(b);

別のものではなく、どちらかを使用する必要があるのはなぜですか?

4

2 に答える 2

-3

概念として、リストは 1 つのユニットとして表示されます。したがって、読みやすさの観点から、オプションの 1 つを選択すると、単一の有効な呼び出しは "a.ShouldBeEquivalentTo(b);" になります。

その他については、あいまいです。

複数形の「ShouldAllBeEquivalentTo」は、要素の 2 つのコレクションを比較するときに適用されます。これらの文字列のグループ (A) とこれらの文字列のグループ (B) を比較していると主張する人もいると思います。ここで何が起こったかというと、文字列のグループは、List データ構造型の下にある単一の概念全体として収集されました。したがって、この呼び出しを使用するのは間違っていると言えます。

最後の形式は 2 つのことを意味します。まず、オブジェクト「a」を何かに変換する必要があります。「すべき」という名前は何も伝えません。その後、結果がリスト オブジェクト "b" と同等かどうかを比較する必要があります。論理的には、同じタイプの 2 つのオブジェクトを比較する必要があります。追加の変換は必要ありません。

コードを読むときは、次の形式を好みます。

リスト「A」は別のリスト「B」と同等です。

List<string> a = new List<string>() { "james", "wood" };
List<string> b = new List<string>() { "james", "wood" };

//creating "IsEquivalentTo" method
bool listsAreEqual = a.IsEquivalentTo(b);

//creating "IsEqualTo" method
listsAreEqual = a.IsEqualTo(b);

//overloading operator ==
listsAreEqual = (a == b);
于 2015-12-19T15:12:16.467 に答える