Func<XXX>
といったようなデリゲートをモックしたい時があります。
これを、 moq を使用する方法です。
やり方
たとえば、int 型を2つ受け取り、文字列に変換するデリゲートがあったとします。(つまり、 Func<int, int, string>
)
これをモックする方法は、以下の通りです。
var mock = new Mock<Func<int, int, string>>();
mock.Setup(m => m(It.IsAny<int>(), It.IsAny<int>())).Returns("モックする文字列");
ポイントは、 Invoke
を使用しないことです。
例えば以下のようにやるとエラーになります。
var mock = new Mock<Func<int, int, string>>();
// これはエラー!System.InvalidCastException: Unable to cast object of type ‘System.Linq.Expressions.InstanceMethodCallExpressionN’ to type ‘System.Linq.Expressions.InvocationExpression’. とかいって怒られる!
mock.Setup(m => m.Invoke(It.IsAny<int>(), It.IsAny<int>())).Returns("モックする文字列");
コメント