Выполнить один и тот же тест с разными конфигурациями - PullRequest
1 голос
/ 08 мая 2019

У меня проект , поддерживающий несколько поставщиков баз данных (SQL, Sqlite, InMemory).Для API-тестов я использую InMemory DB для повышения производительности.Для интеграционных тестов Я хотел бы запустить все тесты для всех провайдеров, чтобы проверить миграции, ограничения БД и т. Д.

Есть ли способ настроить интеграционные тесты для работы с различными конфигурациями?

[править] Создать что-то подобное?
https://github.com/xunit/xunit/issues/542 https://github.com/xunit/samples.xunit/blob/master/TestRunner/Program.cs

1 Ответ

0 голосов
/ 09 мая 2019

Как только я обнаружил [Theory] решение было тривиальным. Выполнение теста теперь указывает поставщика для использования. Я предварительно определил файл конфигурации для использования каждым провайдером; это копируется в файл конфигурации, который будет использоваться, и тест будет выполнен.

    [SkippableTheory]
    [InlineData("MsSql")]
    [InlineData("Sqlite")]
    [InlineData("InMemory")]
    public async Task DoesNotLoadUnspecifiedNavigationPropertiesTest(string provider)
    {
        Skip.If(provider == "MsSql" && !SkipHelper.IsWindowsOS(), "Ignore when not executing on Windows");

        async Task Test()
        {
            // Perform the test with assertions
        }

        await ExecuteTestForProvider(provider, Test);
    }

    private async Task ExecuteTestForProvider(string provider, Func<Task> test)
    {
        try
        {
            SetConfiguration(provider);
            Initialize();

            await test.Invoke();
        }
        finally
        {
            Teardown();
        }
    }

Полная реализация может быть найдена здесь

...