SuperAPI AI 工具集

dotnet-testing-advanced-testcontainers-database

测试与质量

查看项目

更新于 10-16 06:22

技能介绍

本技能用于在 .NET 项目中通过 Testcontainers 对容器化数据库进行集成测试,适合需要验证真实数据库行为、使用 SQL Server/PostgreSQL/MySQL 容器以及测试 EF Core/Dapper 的场景。资料指出 EF Core InMemory 存在明显限制:不支持数据库事务与回滚、无数据库锁定机制、LINQ 查询翻译与真实数据库存在差异、大小写敏感依赖排序规则,且无法测试存储过程、触发器、视图、外键与检查约束、数据类型精度、并发令牌等,因此复杂事务、并发及数据库特定行为应改用 Testcontainers 验证。

主要能力包括:启动并管理数据库容器(PostgreSqlBuilder、MsSqlBuilder),在 InitializeAsync 中启动容器并建立 DbContext,在 DisposeAsync 中释放资源;使用 Collection Fixture 共享容器以减少测试执行时间;外部化 SQL 脚本与配置 Wait Strategy;测试 EF Core 的 Include/ThenInclude、AsSplitQuery、N+1、AsNoTracking,以及 Dapper 的 QueryMultiple、DynamicParameters;按接口分离原则设计 Repository。

使用方式上,需引用测试框架(Microsoft.NET.Test.Sdk、xunit、xunit.runner.visualstudio、AwesomeAssertions)、Testcontainers 与数据库容器包(Testcontainers.PostgreSql、Testcontainers.MsSql)、EF Core 及可选 Dapper。环境要求 Windows 10 2004+、WSL 2、8GB RAM(建议 16GB+)、64GB 磁盘,Docker Desktop 建议 Memory 6GB、CPUs 4 cores、Swap 2GB、Disk 64GB。

限制与注意:资料要求使用 Microsoft.Data.SqlClient 而非 System.Data.SqlClient;Testcontainers 4.8.0 起容器未 Running 会抛 ContainerNotRunningException;需排查端口占用(如 netstat -an | findstr :5432)、清理镜像;内存不足时可调整 Docker 配置、限制并发容器或使用共享容器;测试数据清理须按外键顺序进行。xUnit v3 可使用 Testcontainers.XunitV3(4.9.0)自动管理容器生命周期。部分安装与运行细节本资料未提供。