Тестирование приложения с помощью класса WebApplicationFactory¶
Предположим, мы хотим протестировать приложение целиком, с полностью настроенным конвейером промежуточного ПО и всеми необходимыми зависимостями в контейнере зависимостей. Для этого можно воспользоваться классом WebApplicationFactory из пакета Microsoft.AspNetCore.Mvc.Testing.
Рассмотрим пример, в котором мы проверяем, что на запрос "/ping" всегда возвращается "pong".
public class IntegrationTests: IClassFixture<WebApplicationFactory<Startup>>
{
private readonly WebApplicationFactory<Startup> _fixture;
public IntegrationTests(WebApplicationFactory<Startup> fixture)
{
_fixture = fixture;
}
[Fact]
public async Task PingRequest_ReturnsPong()
{
HttpClient = _fixture.CreateClient();
var response = await client.GetAsync("/ping");
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
Assert.Equal("pong", content);
}
}
Одно из преимуществ использования класса
WebApplicationFactory состоит в том, что для него требуется меньше ручной настройки.Также видно, что в отличие от предыдущего раздела мы просто тестируем поведение приложения при определенных входных данных, а не проверяем работоспособность определенного класса в контексте фиктивного приложения ASP.NET Core.
Чтобы создать тесты, использующие класс
WebApplicationFactory, нужно:
- установить Nuget-пакет Microsoft.AspNetCore.Mvc.Testing в проект;
- обновить элемент
<Project>в файле .csproj тестового проекта:
Это необходимо, чтобы классWebApplicationFactoryмог найти конфигурационные и статические файлы; - унаследовать тестовый класс от
IClassFixture<WebApplicationFactory<T>>, гдеT- реальный класс в проекте приложения (по соглашению обычно используется классStartup).WebApplicationFactoryиспользует ссылку наTдля поиска методаProgram.CreateHostBuilder()для созданияTestServer;IClassFixture<TFixture>— интерфейс-маркер для xUnit, указывающий на необходимость создать экземплярTFixtureи внедрить его в конструктор тестового класса. Подробнее тут;
- принять экземпляр
WebApplicationFactory<T>в конструкторе тестового класса. Его можно использовать для создания тестовогоHttpClient.
Последнее обновление :
14 мая 2023 г.
Дата создания : 25 ноября 2022 г.
Дата создания : 25 ноября 2022 г.