202 测试用例自动生成
使用 Codex `/test` 命令自动生成单元测试、集成测试,覆盖边界与异常场景
学习目标
一、`/test` 命令入门
基本用法
# 为当前文件生成单元测试
codex test src/utils/calculator.ts
# 为指定函数生成测试
codex test --func calculateTotal src/services/order.ts
# 生成集成测试
codex test --integration src/api/users.ts测试框架自动检测
Codex 会自动识别项目使用的测试框架(Jest、Vitest、pytest、JUnit 等),并生成符合项目风格的测试代码。
**💡 提示:** 使用 `codex test --framework jest` 可以显式指定测试框架。
二、生成测试数据与 Fixture
自动生成测试数据
# 为 TypeScript 接口生成 Mock 数据
codex test --generate-fixtures src/types/user.ts
# 为 API 端点生成请求/响应 Fixture
codex test --generate-fixtures --api src/routes/orders.tsCodex 生成的 Fixture 示例:
// __fixtures__/user.fixture.ts
export const mockUser = {
id: "usr_abc123",
name: "张三",
email: "zhangsan@example.com",
role: "admin",
createdAt: "2026-01-15T08:30:00Z",
};
export const mockUserList = [
mockUser,
{ ...mockUser, id: "usr_def456", name: "李四", role: "editor" },
];三、边界测试与异常路径
边界条件覆盖
# 生成边界测试用例
codex test --boundary src/utils/validator.tsCodex 会自动分析参数类型和约束,为以下场景生成测试:
| 边界类型 | 示例场景 |
|---|---|
| 空值 | `null`、`undefined`、空字符串、空数组 |
| 极值 | 最大整数、最小整数、零、负数 |
| 长度边界 | 字符串超长、数组越界 |
| 类型错误 | 传入错误类型的参数 |
| 并发冲突 | 竞态条件、重复请求 |
异常路径测试
# 生成异常路径测试
codex test --error-paths src/services/payment.ts四、测试覆盖率分析与填补
覆盖率检查
# 分析当前测试覆盖率
codex test --coverage src/
# 自动填补未覆盖的分支
codex test --fill-gaps --coverage-threshold 80 src/Codex 会识别未被测试覆盖的代码路径,并自动生成补充测试:
# 输出示例
发现 12 个未覆盖分支:
- src/services/order.ts:45 (else 分支)
- src/services/order.ts:78 (catch 块)
- src/utils/format.ts:23 (默认参数路径)
正在生成补充测试... 完成 12/12五、TDD 工作流与 Codex
标准 TDD 流程
- **Red** — 编写失败的测试:
codex test --write-first src/features/cart.ts
# Codex 根据功能描述先写测试- **Green** — 让测试通过:
codex implement --test src/features/cart.test.ts
# Codex 根据测试用例实现功能代码- **Refactor** — 重构优化:
codex refactor --keep-tests src/features/cart.ts
# 重构同时确保测试仍然通过**💡 提示:** 使用 `codex test --watch` 进入监视模式,每次保存文件时自动运行相关测试,实现即时反馈。
六、本课总结
**核心要点:**
- `/test` 支持单元测试和集成测试两种生成模式
- `--generate-fixtures` 可自动生成类型安全的测试数据
- `--boundary` 和 `--error-paths` 覆盖边界与异常场景
- `--fill-gaps` 自动填补测试覆盖盲区
- Codex 原生支持 Red-Green-Refactor TDD 工作流
**下一步:** 学习文档自动生成 → [203 文档自动生成](module3-203.md)