Das Verspotten von Delegate.Invoke () mit Moq löst eine InvalidCast-Ausnahme in LINQ aus
Sagen wir, das habe ichIService
Schnittstelle:
public interface IService
{
string Name { get; set; }
}
Und ein DelegierterFunc<IService>
das gibt diese Schnittstelle zurück.
In meinem Unit-Test möchte ich die Delegierten verspottenInvoke()
Methode mit Moq wie folgt:
[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
}
UnglücklicherweisemockDelegate.Setup(...)
wirftSystem.InvalidCastException
:
Testmethode UnitTest warf Ausnahme:
System.InvalidCastException: Objekt vom Typ 'System.Linq.Expressions.InstanceMethodCallExpressionN' kann nicht in 'System.Linq.Expressions.InvocationExpression' umgewandelt werden.
at Moq.ExpressionExtensions.GetCallInfo (LambdaExpression-Ausdruck, Mock-Mock)
bei Moq.Mock. <> c_DisplayClass1c`2.b_1b ()
bei Moq.PexProtector.Invoke (Funktion Func`1)
bei Moq.Mock.Setup (Mock1 mock, Expression
1 Ausdruck, Bedingung Bedingung)
bei Moq.Mock1.Setup(Expression
1 Ausdruck)
at UnitTest () in UnitTests.cs: Zeile 38
Linie 38 istmockDelegate.Setup(x => x.Invoke()).Returns(mockService.Object);
Vermisse ich etwas? Oder ist es im Allgemeinen keine gute Idee, die Anrufung von Delegierten zu verspotten?
Danke.