Использование xUnit и TestServer
от Microsoft.AspNet.TestHost, как я могу обернуть каждый тест в транзакции базы данных, которая может быть отброшена после теста?Как выполнить интеграционные тесты, которые используют TestServer в транзакции базы данных?
Вот как я создаю TestServer
:
TestServer = new TestServer(TestServer.CreateBuilder()
.UseStartup<Startup>());
Startup
, который ссылается есть Startup
из проекта веб-приложения. В методе ConfigureServices
в этом классе Startup
добавить EF, как это:
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<TrailsDbContext>(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
я мог вытащить DbContext
обратно услуг и сохранить статическую ссылку на Startup
класса, но это кажется довольно Hacky. Есть ли способ создать экземпляр DbContext
, где я создаю TestServer
и как-то использовать веб-приложение, а не тот, что в классе Startup
?
Редактировать: Я попытался создать экземпляр другого экземпляра DbContext
, где создаю TestServer
и используя этот контекст для удаления и воссоздания базы данных перед каждым тестом, но это добавляет примерно 10 секунд к времени выполнения каждого теста.