用途:指导在 .NET Aspire 分布式应用中编写整合测试,用真实容器复现与正式环境相同的服务架构,并支持从 Testcontainers 迁移到 Aspire Testing。
主要能力:说明 AppHost 项目的必要性(无 AppHost 无法使用 Aspire Testing);给出 AppHost 与测试项目的必要包引用,如 Aspire.Hosting.AppHost、Aspire.Hosting.Testing、xunit、Respawn、AwesomeAssertions;用 ContainerLifetime.Session 管理容器生命周期;提供等待 PostgreSQL 就绪、创建数据库、配置 Respawn(DbAdapter.Postgres、忽略 __EFMigrationsHistory)的做法;用 Collection Fixture 避免重复启动容器;用 TimeProvider 抽象时间依赖。
使用方式:需 .NET 8 SDK 或更高、Docker Desktop(WSL 2 或 Hyper-V)及 AppHost 项目。测试项目引用 AppHost 项目,通过 AspireAppFixture、IntegrationTestCollection、IntegrationTestBase、DatabaseManager 等基础设施文件组织测试,控制器测试继承 IntegrationTestBase。
适用场景:已使用 .NET Aspire、需测试多服务互动、重视统一开发测试体验的云原生项目。若为传统 .NET 项目、需精细容器控制或团队不熟悉 Aspire,则更适合 Testcontainers。
限制与注意:Aspire 启动容器但不自动建库;不要手动配置已由 Aspire 处理的端点以免冲突;PostgreSQL snake_case 与 C# PascalCase 需映射;Respawn 7.0 起 DbAdapter 可自动推断,SQL Server 重置需自行加入 Microsoft.Data.SqlClient。具体收费、平台与效果资料暂未提供。