Я тестирую различные конфигурации для приложения ASP. NET Core 3.1 с использованием xUnit.
Для тестирования двух конфигураций я использую два разных прибора:
public class DefaultTestFixture : WebApplicationFactory<Startup>
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.UseEnvironment("Development");
builder.ConfigureServices(services =>
{
services.AddSingleton<IExternalPayloadService, ExternalPayloadTestService>();
services.AddSingleton<IApiKeyService, ApiKeyTestService>();
});
}
}
и
public class ModifiedTestFixture : WebApplicationFactory<Startup>
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.UseEnvironment("Development");
builder.UseSetting("OneEnvVariable", "1");
builder.ConfigureServices(services =>
{
services.AddSingleton<IExternalPayloadService, ExternalPayloadTestService>();
services.AddSingleton<IApiKeyService, ApiKeyTestService>();
});
}
}
Каждый класс теста выглядит следующим образом:
public class MyFirstTest : IClassFixture<DefaultTestFixture>
{
private HttpClient _client;
public MyFirstTest(DefaultTestFixture factory)
{
_client = factory.CreateClient();
}
[Fact]
public async Task WithValidParametersShouldReturn200()
{
...
}
В некоторых тестах используется DefaultTestFixture
, а в некоторых * ModifiedTestFixture
.
Однако, когда я запускаю тесты, некоторые из них терпят неудачу случайно. Если я запускаю каждый тест по отдельности, они все проходят.
Поскольку они выполняются параллельно, я предполагаю, что тест, запущенный под DefaultTestFixture, изменяет конфигурацию тестируемого приложения во время работы ModifiedTestFixture или наоборот.
Как я могу запустить каждую группу тестов (DefaultTestFixture
и ModifiedTestFixture
тесты) вместе, без отдельного теста каждой группы, мешающего другой группе тестов?
Я могу их запустить последовательно (ie без параллелизма), но это занимает много времени. Мое последнее средство - создать два разных тестовых проекта, по одному для каждой конфигурации, но это кажется излишним.