Mocking Delegate.Invoke () usando Moq lanza la excepción InvalidCast en LINQ
Digamos que tengoIService
interfaz:
public interface IService
{
string Name { get; set; }
}
Y un delegadoFunc<IService>
que devuelve esta interfaz.
En mi prueba de unidad quiero burlarme del delegadoInvoke()
Método utilizando Moq como este:
[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
}
DesafortunadamentemockDelegate.Setup(...)
arrojaSystem.InvalidCastException
:
Método de prueba UnitTest lanzó excepción:
System.InvalidCastException: no se puede convertir el objeto de tipo 'System.Linq.Expressions.InstanceMethodCallExpressionN' para escribir 'System.Linq.Expressions.InvocationExpression'.
en Moq.ExpressionExtensions.GetCallInfo (expresión de LambdaExpression, simulacro de simulacro)
en Moq.Mock. <> c_DisplayClass1c`2.b_1b ()
en Moq.PexProtector.Invoke (función Func`1)
en Moq.Mock.Setup (Mock1 mock, Expression
1 expresión, Condición Condición)
en Moq.Mock1.Setup(Expression
1 expresión)
en UnitTest () en UnitTests.cs: línea 38
La linea 38 esmockDelegate.Setup(x => x.Invoke()).Returns(mockService.Object);
¿Me estoy perdiendo de algo? ¿O la invocación burlona de un delegado generalmente no es una buena idea?
Gracias.