Почему TestServer (AspNetCore) выдает ошибку 404 для статических файлов?

У меня есть образец сервера

var host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();

            host.Run();

с конфигурацией в классе запуска:

public void Configure(IApplicationBuilder app)
{
        app.Run(async (context) =>
        {
            await context.Response.WriteAsync("Hello World!");
        });
}

и я использую тест xunit (обучение):

        public TestFixture()
        {
            var builder = new WebHostBuilder().UseStartup<TStartup>();
            _server = new TestServer(builder);

            Client = _server.CreateClient();
            Client.BaseAddress = new Uri(address);
        }

и позже

        var response = await Client.GetAsync("http://localhost:51021/");
        Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        var responseString = await response.Content.ReadAsStringAsync();
        var content = await response.Content.ReadAsStringAsync();
        Assert.Contains("Hello World!", content);

Все ок (200). Сейчас меняю Startup.cs

    public void Configure(IApplicationBuilder app)
    {
        app.UseDefaultFiles();
        app.UseStaticFiles();
        //app.Run(async (context) =>
        //{
        //    await context.Response.WriteAsync("Hello World!");
        //});
    }

Если я запускаю приложение в браузере, все в порядке (показан index.html). Но если я вызываю его с помощью TestServer, я получаю (404 Not found). Где моя ошибка?


person Mottor    schedule 14.06.2016    source источник


Ответы (2)


XUnit запускает сайт из другого каталога. Нам пришлось обойти это следующим образом: https://github.com/aspnet/StaticFiles/blob/d692066b2bd711653150ad2cccc2268583355532/test/Microsoft.AspNetCore.StaticFiles.Tests/StaticFilesTestServer.cs#L

person Tratcher    schedule 14.06.2016

Другой подход - скопировать эти файлы в проект модульного тестирования.

введите описание изображения здесь

потом

введите описание изображения здесь

Поскольку вы поддерживаете ту же папку структуры проекта, который тестируете, он обнаружит файлы и передаст их процессу внедрения зависимостей.

person Zinov    schedule 18.06.2020