Mocking Delegate.Invoke () usando Moq lança exceção InvalidCast no LINQ
Digamos que eu tenhoIService
interface:
public interface IService
{
string Name { get; set; }
}
E um delegadoFunc<IService>
que retorna essa interface.
No meu teste de unidade, quero zombar do delegado.Invoke()
método usando Moq assim:
[TestMethod]
public void UnitTest()
{
var mockService = new Mock<IService>();
var mockDelegate = new Mock<Func<IService>>();
mockDelegate.Setup(x => x.Invoke()).Returns(mockService.Object);
// The rest of the test
}
InfelizmentemockDelegate.Setup(...)
jogaSystem.InvalidCastException
:
O método de teste UnitTest lançou a exceção:
System.InvalidCastException: Não foi possível converter o objeto do tipo 'System.Linq.Expressions.InstanceMethodCallExpressionN' para o tipo 'System.Linq.Expressions.InvocationExpression'.
em Moq.ExpressionExtensions.GetCallInfo (expressão LambdaExpression, simulação simulada)
em Moq.Mock. <> c_DisplayClass1c`2.b_1b ()
em Moq.PexProtector.Invoke (função Func`1)
em Moq.Mock.Setup (Mock1 mock, Expression
1 expressão, condição Condição)
em Moq.Mock1.Setup(Expression
1 expressão)
em UnitTest () em UnitTests.cs: linha 38
A linha 38 émockDelegate.Setup(x => x.Invoke()).Returns(mockService.Object);
Estou esquecendo de algo? Ou zombar da invocação de delegado geralmente não é uma boa ideia?
Obrigado.