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