using Microsoft.EntityFrameworkCore;
using Workflow.Infrastructure.Persistence;
namespace Workflow.Tests.Form;
///
/// 表单模块测试夹具,提供 InMemory 数据库上下文及通用辅助方法。
/// 每个测试方法应使用独立的 database name 以确保数据隔离。
///
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;
return new WorkflowDbContext(options);
}
///
/// 创建一个已包含种子表单定义的 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;
///
/// xUnit CollectionFixture,用于跨测试类共享 Fixture 实例。
///
[CollectionDefinition("FormTests")]
public class FormTestCollection : ICollectionFixture;