Instruction file imported from wozehua/BestPracticesSolution (
.cursor/rules/testing-strategy.mdc). Copyright stays with the author.
测试策略指南
本文档定义了项目的测试策略和最佳实践。
测试类型
单元测试
- 使用xUnit作为测试框架
- 测试单个方法或类的功能
- 使用AAA模式(Arrange-Act-Assert)
- 保持测试的独立性和可重复性
- 使用模拟对象隔离依赖
集成测试
- 测试多个组件之间的交互
- 使用真实的依赖项
- 测试端到端的功能流程
- 验证组件集成是否正确
性能测试
- 使用BenchmarkDotNet进行基准测试
- 测量代码的执行时间和资源使用
- 比较不同实现的性能差异
- 监控性能回归
测试组织
项目结构
- 测试项目与实现项目放在同一目录下
- 测试项目名称以"Tests"结尾
- 测试类名与实现类名对应
- 使用有意义的命名空间组织测试
测试命名
- 测试类名:
[被测试类名]Tests - 测试方法名:
[测试场景]_[预期结果]_[测试条件] - 例如:
IntTypeParameterReadOnlyMemoryToByte
测试文件组织
- 每个测试类一个文件
- 相关的测试放在同一个类中
- 使用region组织测试方法
- 保持测试文件结构清晰
测试方法
测试方法结构
[Fact]
public void TestMethodName()
{
// Arrange - 准备测试数据
var input = new TestData();
// Act - 执行被测试的方法
var result = target.Method(input);
// Assert - 验证结果
Assert.NotNull(result);
Assert.Equal(expected, result);
}
测试数据准备
- 使用测试数据构建器
- 避免硬编码测试数据
- 使用测试夹具共享测试数据
- 保持测试数据的可维护性
断言使用
- 使用具体的断言方法
- 避免使用通用断言
- 提供清晰的错误消息
- 验证所有相关条件
测试覆盖率
覆盖率要求
- 使用coverlet收集覆盖率数据
- 保持合理的测试覆盖率
- 关注关键代码路径
- 定期审查覆盖率报告
覆盖率目标
- 核心业务逻辑: >80%
- 工具类: >90%
- 基础设施代码: >70%
- 整体覆盖率: >75%
性能测试
基准测试
- 使用BenchmarkDotNet
- 测试关键性能指标
- 比较不同实现的性能
- 监控性能变化
性能测试指标
- 执行时间
- 内存分配
- 垃圾回收
- CPU使用率
- 其他相关指标
测试最佳实践
测试设计
- 每个测试只测试一个方面
- 避免测试间的依赖
- 使用有意义的测试数据
- 保持测试的简单性
测试维护
- 及时更新测试代码
- 删除过时的测试
- 重构测试代码
- 保持测试的可读性
测试文档
- 使用XML文档注释
- 说明测试的目的
- 解释复杂的测试场景
- 记录测试数据的选择原因
测试工具
测试框架
- xUnit - 单元测试框架
- BenchmarkDotNet - 性能测试
- coverlet - 代码覆盖率
- Moq - 模拟框架
测试辅助工具
- FluentAssertions - 断言库
- AutoFixture - 测试数据生成
- Bogus - 假数据生成
- Testcontainers - 容器化测试
持续集成
测试自动化
- 自动运行单元测试
- 自动运行性能测试
- 生成测试报告
- 监控测试结果
测试环境
- 使用干净的测试环境
- 避免环境依赖
- 使用测试配置
- 管理测试资源
测试审查
代码审查
- 审查测试代码质量
- 验证测试覆盖范围
- 检查测试命名
- 确保测试可维护性
测试评审
- 定期评审测试策略
- 更新测试最佳实践
- 分享测试经验
- 改进测试方法
测试文档
测试计划
- 定义测试范围
- 确定测试策略
- 分配测试资源
- 制定测试时间表
测试报告
- 记录测试结果
- 分析测试覆盖率
- 总结性能测试
- 提出改进建议
