Mocking Delegate.Invoke () przy użyciu Moq zgłasza wyjątek InvalidCast w LINQ
Powiedzmy, że mamIService
berło:
public interface IService
{
string Name { get; set; }
}
I delegatFunc<IService>
który zwraca ten interfejs.
W moim teście jednostkowym chcę drwić z delegataInvoke()
metoda używająca Moq w ten sposób:
[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
}
NiestetymockDelegate.Setup(...)
rzucaSystem.InvalidCastException
:
Metoda testowa UnitTest zgłosiła wyjątek:
System.InvalidCastException: Nie można rzutować obiektu typu „System.Linq.Expressions.InstanceMethodCallExpressionN” na „System.Linq.Expressions.InvocationExpression”.
at Moq.ExpressionExtensions.GetCallInfo (wyrażenie LambdaExpression, Mock mock)
at Moq.Mock. <> c_DisplayClass1c`2.b_1b ()
w Moq.PexProtector.Invoke (funkcja Func`1)
at Moq.Mock.Setup (Mock1 mock, Expression
1 wyrażenie, warunek warunku)
w Moq.Mock1.Setup(Expression
1 wyrażenie)
w UnitTest () w UnitTests.cs: linia 38
Linia 38 tomockDelegate.Setup(x => x.Invoke()).Returns(mockService.Object);
Czy czegoś mi brakuje? Albo kpiny z wezwania delegata nie są na ogół dobrym pomysłem?
Dziękuję Ci.