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, Expression1 Ausdruck, Bedingung Bedingung)

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage