用途与范围
ln-743-test-infrastructure 是一个 L3 Worker 类型的 Claude 技能,属于 7XX Project Bootstrap 分类,目标是为项目搭建测试框架、覆盖率工具和示例测试。
该技能会:
- 检测项目技术栈,选择合适的测试框架
- 创建测试配置文件
- 设置带阈值的覆盖率报告
- 创建示例测试以演示测试模式
- 验证测试套件能够成功运行
该技能不会:
- 配置代码检查工具(由 ln-741 负责)
- 设置预提交钩子(由 ln-742 负责)
- 编写实际的应用测试(由开发者完成)
支持的技术栈
| 技术 | 测试框架 | 覆盖率工具 | 配置文件 |
|---|---|---|---|
| TypeScript/React | Vitest | v8/Istanbul | vitest.config.ts |
| .NET | xUnit | Coverlet | *.Tests.csproj |
| Python | pytest | pytest-cov | pytest.ini 或 pyproject.toml |
使用方式
技能执行分为五个阶段。
阶段 1:检查现有测试
在创建测试基础设施之前,先检查项目中已有的内容。
需要检查的文件:
- TypeScript:vitest.config.、jest.config.、.test.ts、.spec.ts
- .NET:.Tests.csproj、.IntegrationTests.csproj
- Python:pytest.ini、conftest.py、tests/、test_*.py
判断逻辑:
- 若已存在完整的测试设置:跳过(并告知用户)
- 若只有部分设置:询问是扩展还是替换
- 若没有任何测试:基于模板创建
阶段 2:创建测试配置
TypeScript/React(Vitest):创建 vitest.config.ts,使用 v8 覆盖率提供方(比 Istanbul 更快),为 React 配置 jsdom 环境,设置覆盖率阈值(最低 80%),创建 testing-library 的设置文件。依赖安装命令:
npm install -D vitest @vitest/coverage-v8 @testing-library/react @testing-library/jest-dom jsdom
.NET(xUnit):创建测试项目,命令如下:
dotnet new xunit -n {Project}.Tests
dotnet sln add tests/{Project}.Tests
.csproj 中需要的依赖:Microsoft.NET.Test.Sdk、xunit、xunit.runner.visualstudio、Moq、FluentAssertions、coverlet.collector。
Python(pytest):在 pyproject.toml 中添加配置或创建 pytest.ini,配置测试发现路径、覆盖率阈值(最低 80%)和覆盖率报告。依赖安装命令:
pip install pytest pytest-cov pytest-asyncio
# 或使用 uv:
uv add --dev pytest pytest-cov pytest-asyncio
阶段 3:创建测试目录结构
TypeScript 采用与源码同目录(co-located)的测试方式,并包含 test/setup.ts 设置文件。
.NET 使用 tests/ 目录,包含 {Project}.Tests 项目及可选的 {Project}.IntegrationTests 项目。
Python 使用 tests/ 目录,包含 conftest.py(共享 fixture)、unit/ 和可选的 integration/。对于 FastAPI/异步项目,基于 conftest_template.py 生成 conftest.py,提供共享的异步 HTTP 客户端 fixture,并调整应用导入路径以匹配项目。
阶段 4:创建示例测试
每种技术栈创建一个示例测试,演示:AAA 模式(Arrange-Act-Assert)、测试命名约定、基本断言、框架特有模式。
- TypeScript 示例:testing-library 的 render()、screen 查询、Jest-dom 匹配器
- .NET 示例:[Fact] 特性、使用 Moq 进行模拟、FluentAssertions 语法
- Python 示例:pytest fixture、assert 语句、参数化测试(可选)
阶段 5:验证测试运行
- TypeScript:
npm test与npm run test:coverage,预期示例测试通过并生成覆盖率报告 - .NET:
dotnet test与dotnet test --collect:"XPlat Code Coverage",预期示例测试通过并收集覆盖率 - Python:
pytest与pytest --cov=src --cov-report=term-missing,预期示例测试通过并显示覆盖率报告
若失败:检查测试配置、依赖,并验证示例测试语法。
覆盖率要求
| 指标 | 最低 | 目标 |
|---|---|---|
| 行 | 70% | 80% |
| 分支 | 70% | 80% |
| 函数 | 70% | 80% |
| 语句 | 70% | 80% |
应配置 CI,当覆盖率低于阈值时失败。
关键规则
- 必须配置覆盖率阈值,无例外。
- 示例测试必须通过,不要创建损坏的示例。
- 所有示例测试使用 AAA 模式(Arrange-Act-Assert)。
- 单元测试与源码同目录(TypeScript)或使用 tests/ 目录(.NET、Python)。
监控(2.1.98+):当脚手架后的测试验证预计超过 30 秒时,使用 Monitor。回退方案:Bash(run_in_background=true)。
完成定义
- 测试框架已安装并配置
- 覆盖率工具已配置,阈值 80%
- 测试目录结构已创建
- 示例测试已创建并通过
- npm test / dotnet test / pytest 可成功运行
- 覆盖率报告可生成
- 已告知用户:如何运行测试、在哪里添加新测试、覆盖率要求
参考文件
| 文件 | 用途 |
|---|---|
| vitest_template.ts | Vitest 配置模板 |
| vitest_setup_template.ts | 测试设置文件 |
| react_test_template.tsx | React 组件测试 |
| xunit_csproj_template.xml | .NET 测试项目 |
| xunit_test_template.cs | xUnit 测试示例 |
| pytest_config_template.toml | pytest 配置 |
| pytest_test_template.py | pytest 测试示例 |
| conftest_template.py | 共享异步 fixture(FastAPI) |
| testing_guide.md | 测试最佳实践 |
错误处理
| 错误 | 原因 | 解决方案 |
|---|---|---|
| Vitest not found | 未安装 | npm install -D vitest |
| jsdom errors | 缺少依赖 | npm install -D jsdom |
| xUnit discovery fails | SDK 版本不匹配 | 更新 Microsoft.NET.Test.Sdk |
| pytest not found | 不在 PATH 中 | pip install pytest |
| Coverage 0% | 源路径错误 | 检查 coverage.include 配置 |
版本:3.0.0,最后更新:2026-03-18。