Как запустить тесты xUnit приложения ASP. NET Core с различными конфигурациями? - PullRequest
0 голосов
/ 09 апреля 2020

Я тестирую различные конфигурации для приложения 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 без параллелизма), но это занимает много времени. Мое последнее средство - создать два разных тестовых проекта, по одному для каждой конфигурации, но это кажется излишним.

...