Как макет веб-API для тестирования - PullRequest
0 голосов
/ 11 марта 2020

У меня есть библиотека классов, в которую включено несколько DelegationHandlers , это просто, получить запрос, добавить несколько заголовков на основе содержимого запроса и передать запрос вниз.

Так что я необходимо написать модульные тесты для моей библиотеки. Я использую. NET Core 2.1 и xunit, мне было интересно, если есть способ смоделировать веб-сервер, то я могу отправить запрос на этот веб-сервер с помощью моей библиотеки и проверить результат моего запроса? Любая идея, как я мог издеваться над веб-сервером (приложение)? или как я могу проверить свою библиотеку, отправив запрос http?

Ответы [ 2 ]

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

Я нашел решение здесь, я поделюсь им, может быть, полезно для других.

public void GivenThereIsAServiceRunningOn(string baseUrl, string basePath, RequestDelegate del)
{
    _builder = new WebHostBuilder()
        .UseUrls(baseUrl)
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .Configure(app =>
        {
            app.UsePathBase(basePath);
            app.Run(del);
        })
        .Build();

    _builder.Start();
}

Те же WebHostBuilder, которые мы использовали в интеграционных тестах, теперь мы могли передать RequestDelegate для запуска приложения:

GivenThereIsAServiceRunningOn(baseUrl, basePath, async context =>
{
    _downstreamPath = !string.IsNullOrEmpty(context.Request.PathBase.Value) ? context.Request.PathBase.Value : context.Request.Path.Value;

    if (_downstreamPath != basePath)
    {
        context.Response.StatusCode = statusCode;
        await context.Response.WriteAsync("downstream path didn't match base path");
    }
    else
    {
        context.Response.StatusCode = statusCode;
        await context.Response.WriteAsync(responseBody);
    }
});
0 голосов
/ 11 марта 2020

Если вы пишете модульные тесты, вам не нужно запускать тестовые серверы. Однако для проведения интеграционных тестов с использованием фиктивных контроллеров да, вы можете использовать тестовый сервер от Microsoft

https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-3.1

...