Dears,
Я пытаюсь создать интеграционные тесты, которые тестируют мой контроллер API с использованием провайдера базы данных ядра структуры сущностей.
Я создал CustomWebApplicationFactory , который настраивает мои службы, включая мой контекст БД, согласно официальному руководству по документации
и я использовал эту фабрику как IClassFixture в моих тестовых классах xunit, но мои тесты были сломаны, когда они выполнялись в параллельном , потому что, как я думаю, они использовали один и тот же экземпляр базы данных .
Это моя конфигурация
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureServices(services =>
{
// Create a new service provider.
var serviceProvider = new ServiceCollection()
.AddEntityFrameworkInMemoryDatabase()
.BuildServiceProvider();
// Add a database context (ApplicationDbContext) using an in-memory
// database for testing.
services.AddDbContext<ApplicationDbContext>(options =>
{
options.UseInMemoryDatabase("InMemoryDbForTesting");
options.UseInternalServiceProvider(serviceProvider);
});
// Build the service provider.
var sp = services.BuildServiceProvider();
// Create a scope to obtain a reference to the database
// context (ApplicationDbContext).
using (var scope = sp.CreateScope())
{
var scopedServices = scope.ServiceProvider;
var db = scopedServices.GetRequiredService<ApplicationDbContext>();
// Ensure the database is created.
db.Database.EnsureCreated();
}
});
}
}