私は Moq 3.x を使用しようとしていますが、見事に動作します。ただし、解決方法がわからない問題があります。与えられた
public interface ITestSpec
{
bool Run(Action<string, string> onIncorrectResponse);
}
私は次のことを試みています:
var passingTestSpec = new Mock<ITestSpec>();
passingTestSpec
.Setup(m => m.Run(null))
.Returns(true);
Action<string, string> fakeAction =
(expected, actual) => { throw new Exception("Should not run"); };
Assert.IsTrue(passingTestSpec.Object.Run(fakeAction));
私の問題は、passingTestSpec.Object.Run(... some action ...) の呼び出しが false を返すことです。Moq ライブラリは、Setup() 呼び出しで Run() に渡した引数にアクションを一致させようとして失敗したようです。実際には、Run() 呼び出しにどのアクションを入れても問題ありません...それでも false が返されます。
何か案は?
[編集] 何かを発見しました。セットアップ行を次のように置き換えた場合
.Setup(m => m.Run(fakeAction))
テストに合格します。ただし、 .Run() メソッドが呼び出されるアクションがわからないため、これは解決策ではありません。アクションに相当する It.IsAny を知っている人はいますか?