2

同等性の比較はどのように機能しFuncますか?問題の複雑さをこれらの単体テストに減らしました。

[Test]
public void Will_Pass()
{
    Func<string> func = () => "key";
    Assert.That(func, Is.EqualTo(func));
}

[Test]
public void Will_Fail()
{
    Func<string> funcA = () => "key";
    Func<string> funcB = () => "key";
    Assert.That(funcA, Is.EqualTo(funcB));
}

Funcaの1つのインスタンスが別のインスタンスと等しいことをテストし、正常にアサートする必要があります。だから私は基本的に失敗したテストに合格する方法が必要です。

カスタムタイプを作成してオーバーライドせずにこれを行う方法はありますEquals()か?

4

1 に答える 1

4

失敗したテストは合格しないはずです。.NETのすべてに関する限り、これらは同等の関数ではありません。少なくとも、現在のMicrosoft C#コンパイラの実装ではそうです。デリゲートは、個別に生成されたメソッドを参照します(ILを調べることで簡単に検証できます)。言語仕様では、それらを同等にすることができますが、必須ではありません。これを行う実装はわかりません。

デリゲートの同等性の比較は、基本的に次の要素で構成されます(シングルアクションデリゲートの場合)。

  • 代表団は同じ方法を参照していますか?
  • 代表者が目標を持っている場合、それらの目標は等しいですか?

テストでは、最初の条件はfalseになります。

于 2012-10-08T09:17:34.037 に答える