Verspottende Erweiterungsmethoden mit Moq

Ich habe ein bereits vorhandenes Interface ...

public interface ISomeInterface
{
    void SomeMethod();
}

und ich habe dieses Interface mit einem Mixin erweitert ...

public static class SomeInterfaceExtensions
{
    public static void AnotherMethod(this ISomeInterface someInterface)
    {
        // Implementation here
    }
}

Ich habe eine Klasse, die das nennt und die ich testen möchte ...

public class Caller
{
    private readonly ISomeInterface someInterface;

    public Caller(ISomeInterface someInterface)
    {
        this.someInterface = someInterface;
    }

    public void Main()
    {
        someInterface.AnotherMethod();
    }
}

und ein Test, bei dem ich die Schnittstelle verspotten und den Aufruf der Erweiterungsmethode verifizieren möchte ...

    [Test]
    public void Main_BasicCall_CallsAnotherMethod()
    {
        // Arrange
        var someInterfaceMock = new Mock<ISomeInterface>();
        someInterfaceMock.Setup(x => x.AnotherMethod()).Verifiable();

        var caller = new Caller(someInterfaceMock.Object);

        // Act
        caller.Main();

        // Assert
        someInterfaceMock.Verify();
    }

Das Ausführen dieses Tests erzeugt jedoch eine Ausnahme ...

System.ArgumentException: Invalid setup on a non-member method:
x => x.AnotherMethod()

Meine Frage ist, gibt es eine gute Möglichkeit, den Mixin-Aufruf zu verfälschen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage