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("モックする文字列"); 
  
  
  
  
コメント