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, Expression1 expresión, Condición Condición)

en Moq.Mock1.Setup(Expression1 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.

Respuestas a la pregunta(2)

Su respuesta a la pregunta