Mocking Delegate.Invoke () с использованием Moq генерирует исключение InvalidCast в LINQ.

Допустим, у меня естьIService интерфейс:

public interface IService
{
    string Name { get; set; }
}

И делегатFunc<IService> который возвращает этот интерфейс.

В моем модульном тесте я хочу издеваться над делегатомInvoke() метод с использованием Moq, как это:

[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
}

к несчастьюmockDelegate.Setup(...) бросаетSystem.InvalidCastException:

Метод испытания UnitTest вызвала исключение:

System.InvalidCastException: Невозможно привести объект типа 'System.Linq.Expressions.InstanceMethodCallExpressionN' к типу System.Linq.Expressions.InvocationExpression.

в Moq.ExpressionExtensions.GetCallInfo (выражение LambdaExpression, макет макета)

в Moq.Mock. <> c_DisplayClass1c`2.b_1b ()

в Moq.PexProtector.Invoke (функция Func`1)

в Moq.Mock.Setup (Mock1 mock, Expression1 выражение, состояние состояние)

в Moq.Mock1.Setup(Expression1 выражение)

в UnitTest () в UnitTests.cs: строка 38

Строка 38mockDelegate.Setup(x => x.Invoke()).Returns(mockService.Object);

Я что-то пропустил? Или насмешливый вызов делегата, как правило, не очень хорошая идея?

Спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос