SuperAPI AI 工具集

tdd-mastery

测试与质量

查看项目

更新于 10-15 15:29

技能介绍

TDD Mastery 是一个测试驱动开发工作流技能,核心是红-绿-重构循环。红:编写一个定义期望行为的失败测试;绿:编写最少代码使测试通过;重构:在保持测试通过的同时清理代码。其原则是:没有失败测试前绝不写生产代码,每个循环应耗时 2-10 分钟。

测试结构上,建议一致采用 Arrange-Act-Assert 模式:Arrange 设置测试数据和依赖,Act 执行被测行为,Assert 验证期望结果;测试命名可采用 test_<unit><scenario><expected_result> 或 it("should <behavior> when <condition>")。

资料给出了 Jest/Vitest、pytest 与 Go 三种语言的示例。Jest/Vitest 示例使用 vi.fn() / jest.fn() 做 mock,倾向于依赖注入而非模块 mock,用 beforeEach 做共享设置,并禁止测试间共享可变状态。pytest 示例使用 @pytest.fixture 提供 fixture(如数据库会话,用 yield 并在结束后 rollback)、@pytest.mark.parametrize 做参数化测试、pytest.raises 验证异常,共享 fixture 放在 conftest.py,慢测试用 @pytest.mark.slow 标记。Go 示例默认使用表驱动测试,在测试工具函数中使用 t.Helper(),并建议仅在团队已使用时采用 testify/assert。

测试层级分为单元(单函数/类,<100ms,无依赖全 mock)、集成(模块边界,<5s,使用真实数据库和文件系统)、E2E(完整用户流程,<30s,全栈)。目标比例为 70% 单元、20% 集成、10% E2E。

覆盖率规则:在 CI 中强制最低 80% 行覆盖率,关注分支覆盖率而非仅行覆盖率,排除生成代码、类型定义与配置文件,绝不只为凑覆盖率数字而写测试,要测试行为。资料给出命令示例:Jest/Vitest 用 vitest run --coverage --coverage.thresholds.lines=80 --coverage.thresholds.branches=75;pytest 用 pytest --cov=src --cov-fail-under=80 --cov-branch;Go 用 go test -coverprofile=cover.out -coverpkg=./... ./... 与 go tool cover -func=cover.out。

Mock 指南:在边界处 mock(HTTP 客户端、数据库、文件系统、时钟),绝不 mock 被测单元本身,仓库类优先用假实现(内存实现)而非 mock,断言行为而非 mock 调用次数,用 t.Cleanup / afterEach 重置共享 mock。

需避免的反模式包括:测试实现细节而非行为;删除代码后仍能通过的测试(同义反复测试);测试用例间共享可变状态;忽视不稳定测试而不修复;直接测试私有方法;掩盖意图的巨型测试设置。