using Microsoft.EntityFrameworkCore;
namespace BuildFlow.Workflow.Tests.Form;
public class FormTestFixture : IDisposable
{
///
/// 创建一个独立的 InMemory WorkflowDbContext 实例。
/// 每次调用都使用新的 database name,确保测试之间互不干扰。
///
public WorkflowDbContext CreateDbContext([System.Runtime.CompilerServices.CallerMemberName] string testName = "")
{
var options = new DbContextOptionsBuilder()
.UseInMemoryDatabase(databaseName: $"WorkflowTest_{testName}_{Guid.NewGuid()}")
.Options;
var db = new WorkflowDbContext(options);
db.SavingChanges += AuditStub.OnSave;
return db;
}
///
/// 创建一个已包含种子表单定义的 DbContext,用于需要已有数据的测试场景。
///
public async Task CreateDbContextWithSeedAsync(
string testName,
Action? seedAction = null)
{
var db = CreateDbContext(testName);
if (seedAction is not null)
{
seedAction(db);
await db.SaveChangesAsync();
}
return db;
}
public void Dispose()
{
GC.SuppressFinalize(this);
}
}
///
/// xUnit ClassFixture,用于在测试类级别共享 Fixture 实例。
///
public class FormTestFixtureClassFixture : FormTestFixture;