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, Expression
1 выражение, состояние состояние)
в Moq.Mock1.Setup(Expression
1 выражение)
в UnitTest () в UnitTests.cs: строка 38
Строка 38mockDelegate.Setup(x => x.Invoke()).Returns(mockService.Object);
Я что-то пропустил? Или насмешливый вызов делегата, как правило, не очень хорошая идея?
Спасибо.