using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using DramaLing.Api.Data; namespace DramaLing.Api.Tests; /// /// 測試基類,提供通用的測試基礎設施 /// public abstract class TestBase : IDisposable { protected readonly DramaLingDbContext DbContext; protected readonly ServiceProvider ServiceProvider; protected TestBase() { var services = new ServiceCollection(); ConfigureServices(services); ServiceProvider = services.BuildServiceProvider(); DbContext = ServiceProvider.GetRequiredService(); // 確保資料庫已建立 DbContext.Database.EnsureCreated(); } /// /// 配置測試用服務 /// protected virtual void ConfigureServices(IServiceCollection services) { // 使用 InMemory 資料庫 services.AddDbContext(options => options.UseInMemoryDatabase(Guid.NewGuid().ToString())); // 添加日誌記錄 services.AddLogging(builder => builder.AddConsole()); } /// /// 清理測試資料 /// protected virtual async Task CleanupAsync() { if (DbContext != null) { await DbContext.Database.EnsureDeletedAsync(); } } public virtual void Dispose() { CleanupAsync().GetAwaiter().GetResult(); DbContext?.Dispose(); ServiceProvider?.Dispose(); GC.SuppressFinalize(this); } }