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;