Убедитесь, что промежуточное ПО используется - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь подтвердить с помощью юнит-теста, что промежуточное ПО фактически добавляется в конвейер. У меня есть следующий статический метод, который добавляет промежуточное программное обеспечение. Это то, что я тестирую.

public static class HandleDbUpdateExceptionExtensions
{
    public static IApplicationBuilder UseDbUpdateExceptionHandler(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<DbUpdateExceptionHandler>();
    }
}

Я знаю, что на самом деле это работает, потому что промежуточное программное обеспечение работает на моем сайте. Тем не менее, я хотел бы написать модульный тест, чтобы он всегда включался в будущие сборки. Мой модульный тест, однако, не проходит:

[Fact(DisplayName = "Exception handler is added to IApplicationBuilder")]
public void DbUpdateExceptionHandler_Added_To_IApplicationBuilder()
{
    var builder = new Mock<IApplicationBuilder>().Object;

    builder.UseDbUpdateExceptionHandler();

    Assert.NotNull(builder.ApplicationServices);

    //var test = builder.ApplicationServices.GetService(typeof(DbUpdateExceptionHandler));
}

builder.ApplicationServices равно нулю, поэтому тест в настоящее время не проходит. Я предполагаю, что это терпит неудачу, потому что я просто издеваюсь IApplicationBuilder, но в Интернете очень мало актуальных материалов о модульном тестировании существования промежуточного программного обеспечения .Net Core.

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

В дополнение к ответу @ poke вам может понадобиться анализ промежуточного программного обеспечения , который является частью стека ASP.NET Core Diagnostics. Существует также образец приложения .

Что он в основном делает, так это окружает каждое промежуточное программное обеспечение AnalysisMiddleware, которое записывает информацию в источник диагностики. Вы можете создать прослушиватель источника диагностики в своих тестах и ​​проверить, что каждое промежуточное программное обеспечение вызывается. Однако для этого требуется выполнить конвейер промежуточного программного обеспечения, что фактически означает создание интеграционного теста.

0 голосов
/ 01 мая 2018

UseMiddleware на самом деле метод расширения, который создаст RequestDelegate, который использует ваше промежуточное ПО для внутреннего использования. Этот делегат делает много вещей, поэтому вам будет очень трудно проверить, правильно ли он зарегистрирует ваш фактический тип промежуточного программного обеспечения.

Единственное, что вы действительно можете сделать, это проверить, что базовый ApplicationBuilder.Use метод был вызван с некоторым делегатом запроса.

В качестве альтернативы, вы также можете вызвать промежуточное ПО, создав конвейер приложения и выполнив его. Но для этого потребуется, чтобы вы правильно настроили внедрение зависимостей (поскольку делегат из UseMiddleware() будет использовать это) и чтобы все зависимости вашего промежуточного программного обеспечения были настроены правильно.

Так что это будет очень сложно. Я бы посоветовал вам написать интеграционный тест , который проверяет, что для запроса ваше промежуточное ПО будет правильно вызываться и сможет делать то, что должно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...