using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
var constr = $"DataSource={Guid.NewGuid()}.db";
builder.Services.AddDbContext(o => o.UseSqlite(constr));
var app = builder.Build();
app.Run();
public record Person(int Id);
public class AppDbContext(DbContextOptions o) : DbContext(o)
{
public DbSet People { get; set; }
}
public interface IWebApiMarker;
Чтобы облегчить переключение между DisposeAsync() и Dispose(), я создал переменную компиляции SYNC.
#define SYNC
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.DependencyInjection;
namespace WebApi.Test;
public class Test_1 : BaseTest
{
[Fact] public async Task Test() => await Task.Delay(2000);
}
#if SYNC
public abstract class BaseTest : IDisposable
#else
public abstract class BaseTest : IAsyncDisposable
#endif
{
private readonly WebApplicationFactory _factory;
protected BaseTest()
{
_factory = new WebApplicationFactory();
using var scope = _factory.Services.CreateScope();
var db = scope.ServiceProvider.GetRequiredService();
db.Database.EnsureCreated();
}
#if SYNC
public void Dispose()
{
using var scope = _factory.Services.CreateScope();
var db = scope.ServiceProvider.GetRequiredService();
db.Database.EnsureDeleted();
_factory.Dispose();
}
#else
public async ValueTask DisposeAsync()
{
using var scope = _factory.Services.CreateScope();
var db = scope.ServiceProvider.GetRequiredService();
db.Database.EnsureDeleted();
await _factory.DisposeAsync();
}
#endif
}
Я не понимаю, почему DisposeAsync() не может удалить файл базы данных в конце каждого теста.
Я хочу, чтобы каждый интеграционный тест создавал уникальное имя файла базы данных и удалял его в конце теста. [code]using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args); var constr = $"DataSource={Guid.NewGuid()}.db"; builder.Services.AddDbContext(o => o.UseSqlite(constr)); var app = builder.Build(); app.Run();
public record Person(int Id); public class AppDbContext(DbContextOptions o) : DbContext(o) { public DbSet People { get; set; } } public interface IWebApiMarker; [/code] Чтобы облегчить переключение между DisposeAsync() и Dispose(), я создал переменную компиляции SYNC. [code]#define SYNC using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.Extensions.DependencyInjection;
namespace WebApi.Test;
public class Test_1 : BaseTest { [Fact] public async Task Test() => await Task.Delay(2000); }
#if SYNC public abstract class BaseTest : IDisposable #else public abstract class BaseTest : IAsyncDisposable #endif { private readonly WebApplicationFactory _factory; protected BaseTest() { _factory = new WebApplicationFactory(); using var scope = _factory.Services.CreateScope(); var db = scope.ServiceProvider.GetRequiredService(); db.Database.EnsureCreated(); } #if SYNC public void Dispose() { using var scope = _factory.Services.CreateScope(); var db = scope.ServiceProvider.GetRequiredService(); db.Database.EnsureDeleted(); _factory.Dispose(); } #else public async ValueTask DisposeAsync() { using var scope = _factory.Services.CreateScope(); var db = scope.ServiceProvider.GetRequiredService(); db.Database.EnsureDeleted(); await _factory.DisposeAsync(); } #endif } [/code] Я не понимаю, почему DisposeAsync() не может удалить файл базы данных в конце каждого теста.