Параллельное интеграционное тестирование с базой данных SQL - PullRequest
0 голосов
/ 18 февраля 2019

Требуемый результат: Запустите интеграционные тесты параллельно с платформой сущностей, настроенной на использование какой-либо базы данных, которая обеспечивает ограничения.

Текущая ситуация: у меня есть проект с некоторыми интеграционными тестами, и под этим я подразумеваю набор тестовс WebApplicationFactory<Startup>.В настоящее время я использую его с настройкой EF Core для использования в базе данных памяти

 protected override void ConfigureWebHost(IWebHostBuilder builder)
        {
            ConfigureWebHostBuilder(builder);
            builder.ConfigureTestServices(services =>
            {
                var serviceProvider = new ServiceCollection()
                    .AddEntityFrameworkInMemoryDatabase()
                    .BuildServiceProvider();

                services.AddDbContext<AppDbContext>(options => 
                {
                    options.UseInMemoryDatabase("testDb");
                    options.UseInternalServiceProvider(serviceProvider);
                    options.EnableDetailedErrors();
                    options.EnableSensitiveDataLogging();
                });
            });
        }

. Хотя это работает, проблема заключается в том, что он не обеспечивает выполнение запросов SQL, и я уже выполнял в нескольких случаях, когда интеграционные тесты показывают эту функциюработает, но при попытке воспроизвести его, когда фактический проект запущен и EF подключен к базе данных SQL Server, эта функция завершается ошибкой из-за некоторого сбоя ограничения базы данных.

Идеи:

  • СначалаЯ думал об использовании SQLite в базе данных памяти.Не сработало, я думаю, это проблема параллелизма, потому что в начале каждого теста я вытираю базу данных с помощью .EnsureDeleted() .EnsureCreated() .Migrate()
  • Затем SQLite с файлами со случайными именами.Не сработало, потому что мне не удалось стереть внутренний DbContext Cache.Я был уверен, что файл был воссоздан и очищен, но DbContext просто имел кешированные сущности.
  • Наконец, после некоторых миграций я объявил, что, вероятно, вообще не смогу использовать SQLite, потому что он не поддерживаетмного типов миграции (удаление FK, изменение столбца и т. д.) /
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...