name: 测试驱动开发 description: 在编写新功能、添加特性、修复bug或重构时应用TDD原则 - 先写失败测试,再实现代码使其通过,然后重构。 allowed-tools:
- Write
- Read
- Edit
- Bash
- Grep
测试驱动开发 (TDD)
所有代码更改的Red → Green → Refactor循环。
TDD循环
- RED: 写失败测试
- GREEN: 写最少的代码使其通过
- REFACTOR: 改进代码质量
对每个需求重复
何时应用TDD
✅ 始终使用TDD于:
- 新函数/方法
- 新特性
- bug修复(先复现)
- 重构现有代码
- API更改
❌ 跳过TDD于:
- UI样式调整
- 配置更改
- 文档更新
过程
1. 先写失败测试
# 开始测试
test "计算含税总额" do
result = Calculator.calculate_total([100, 200])
assert Money.equal?(result, Money.new(:USD, 324))
end
# 运行测试 - 应该失败
mix test
2. 实现最少的代码
# 仅足够通过
def calculate_total(prices) do
prices |> Enum.sum() |> Kernel.*(1.08) |> Money.new(:USD)
end
3. 重构
提取常量,改进命名等。
按技术栈的测试模式
后端 (Elixir)
- 文件:
test/path/module_test.exs - 模式:
apps/api/test/your_app/task/task_test.exs
前端 (TypeScript)
- 文件:
ComponentName.test.tsx - 模式:
mobile/libraries/atorasu/atoms/Button/Button.test.tsx
关键规则
- 测试必须先失败(验证测试有效)
- 每个需求一个测试
- 测试行为,而非实现
- 提交前运行完整测试套件
- 绝不跳过失败测试
常见陷阱
- 在测试前写实现
- 测试未实现就通过(假阳性)
- 测试实现细节而非行为
- 未运行测试以验证先失败
验证
# 后端
mix test path/to/test.exs
# 前端
yarn test path/to/test.tsx