Как проверить метод расширения через Moq - PullRequest
0 голосов
/ 22 марта 2020

В методе Configure я вызываю мой метод расширения

app.UseJsonResponse();

Мой метод расширения

public static class JsonResponseExtension
{
    public static IApplicationBuilder UseJsonResponse(this IApplicationBuilder app)
    {
        app.UseMiddleware<JsonResponseMiddleware>();
        return app;
    }
}

Я хочу проверить UseJsonResponse метод. Я написал

public class JsonResponseExtensionTest
{
    [Fact]
    public void UseJsonResponse()
    {
        var iApplicationBuilderMock = new Mock<IApplicationBuilder>();
        iApplicationBuilderMock
            .Verify(b => b.UseMiddleware<JsonResponseMiddleware>(), Times.Never);

    }
}

И я получаю исключение

Extension methods (here: UseMiddlewareExtensions.UseMiddleware) may not be used in setup / verification expressions.

Как решить эту проблему?

1 Ответ

0 голосов
/ 30 марта 2020

UseMiddleware - это расширение, которое нельзя смоделировать, вы должны смоделировать то, что расширение вызывает в интерфейсе. В этом случае этот метод, вероятно, будет

IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware);

Source

. Мне нужно было бы узнать больше о JsonResponseMiddleware как расширении UseMiddleware, и о расширениях, которые он тоже вызывает, имеет довольно много времени, некоторые из них связаны с интерфейсами, которые реализует JsonResponseMiddleware. Для справки, UseMiddleware расширения можно найти здесь .

Имея под рукой информацию, после вызова вашего расширения UseJsonResponse следующее подтвердит, что Use был вызван один раз.

[Test]
public void Test1()
{
    var applicationBuilderMock = new Mock<IApplicationBuilder>();
    var mockedApplicationBuilder = applicationBuilderMock.Object;

    mockedApplicationBuilder.UseJsonResponse();

    applicationBuilderMock.Verify(x => x.Use(It.IsAny<Func<RequestDelegate, RequestDelegate>>()), Times.Once);
}

Чтобы продолжить, мне нужно знать больше о JsonResponseMiddleware как уже упоминалось. Похоже, что нужно приложить гораздо больше усилий, чтобы включить проверку типа JsonResponseMiddleware.

...