moqとのマッチングでセットアップ/ベリファイ用にかなり複雑な式ツリーを簡単に作成しようとすると、 。 匿名関数からIt.Is ...()が呼び出されたときにMoqのセットアップ/ベリファイマッチャーが失敗する理由
は、私は次のコードは、5つのテストを表しpublic interface IService
{
int Send(int value);
}
の下に定義されたシンプルなインタフェースをからかっていたと。 mockSender.Setup(...)
のそれぞれに対して1つのテスト。失敗したとマークされたテストが失敗する理由を誰でも説明できますか?
[Test]
public void TestInlineSetup()
{
const int expected = 5;
var mockSender = new Mock<IService>(MockBehavior.Loose);
//passes
mockSender.Setup(s => s.Send(It.IsAny<int>())).Returns(expected);
//fails
var sendMatch = It.IsAny<int>();
mockSender.Setup(s => s.Send(sendMatch)).Returns(expected);
//passes
mockSender.Setup(s => s.Send(SendMatchFromMethod())).Returns(expected);
//fails
var sendMatch = SendMatchFromMethod();
mockSender.Setup(s => s.Send(sendMatch)).Returns(expected);
//fails (this is somewhat contrived, but I have reasons for wanting to curry this)
mockSender.Setup(s => s.Send(SendMatchFromCurriedMethod()())).Returns(expected);
Assert.That(mockSender.Object.Send(expected), Is.EqualTo(expected));
}
public static int SendMatchFromMethod()
{
return It.IsAny<int>();
}
public static Func<int> SendMatchFromCurriedMethod()
{
return() => It.IsAny<int>();
}
編集:私はMock.Of < ..>(..)を知っていると、通常はそれを使用することを好むが、この場合には、それはオプションではありません。
正解ですが、It.IsAny <>を使うことはできません。 – aqwert