codex根据项目结构、已有测试和方法特征智能选择测试类型:先分析依赖判断单元或集成测试,再参考同包测试风格,最后识别敏感词触发特定策略;支持prompt指定、注释锚点和命名规则三种手动干预方式。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当你在 Codex 中提交一个“给用户服务加测试”的需求时,它不会默认给你生成单元测试或集成测试——它会先读项目结构、看已有测试文件、分析被测代码的依赖关系,再决定该写哪一类测试。
Codex 判断测试类型的核心依据
第一步:扫描当前模块的 import 语句和构造函数参数。如果 UserService 类里直接 new 了 JdbcUserDao 或注入了 @Autowired DataSource,Codex 就判定该类强依赖外部资源,默认倾向生成集成测试;如果只依赖纯接口(如 UserDao)且测试中用 @Mock 注解隔离,则归为单元测试。
第二步:检查 test 目录下同包路径是否存在已有的 *Test.java 文件。若存在 CalculatorServiceTest.java 且里面大量使用 Mockito.when(...).thenReturn(...),Codex 会沿用相同风格;若已有 UserControllerIntegrationTest.java 并调用 TestRestTemplate 发起真实 HTTP 请求,它就会自动对新增逻辑补全集成测试用例。
第三步:识别方法签名中的敏感词。例如方法名含 “withDatabase”、“inTransaction”、“endToEnd”,或参数含 DataSource、RestTemplate、WebClient,Codex 会跳过 Mock 策略,直接启用嵌入式 H2 数据库 + @SpringBootTest 启动上下文。
手动干预测试类型的方法
方法一:在 prompt 中明确指定测试层级。例如:“请为 updateUserStatus 方法写一个单元测试,用 Mockito 模拟 UserDao,不启动 Spring 容器”。Codex 会禁用 @SpringBootTest,改用 @ExtendWith(MockitoExtension.class),并生成 verify(userDao).updateStatus(...) 断言。
配置 OpenClaw 多提供商认证与 OpenAI Codex OAuth 备用方案,实现自动模型切换,适用于多 OpenAI Codex 账户设置。
方法二:用注释锚点控制。在目标方法上方添加特殊注释:// @codex-test: unit,Codex 解析到该标记后,会强制走单元测试生成路径,忽略其实际数据库字段注入事实。
方法三:修改测试类命名规则。如果你的项目约定所有集成测试类必须以 *IntegrationTest 结尾,Codex 在生成新测试类时会严格遵守该命名惯例——哪怕你没提要求,它也会自动补全 IntegrationTest 后缀并配置 @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)。
验证 Codex 输出是否符合预期
运行 Codex 生成的测试前,先检查 @RunWith 或 @ExtendWith 注解。若看到 @RunWith(SpringRunner.class) 或 @SpringBootTest,说明是集成测试;若看到 @ExtendWith(MockitoExtension.class) 且无任何 Spring 上下文注解,就是单元测试。
执行 mvn test -Dtest=UserServiceTest#testUpdateStatus 时,观察控制台日志。出现 “Started Application in X seconds” 表示 Spring Boot 容器已启动→这是集成测试;若只有 “Executing test method…” 且耗时低于 200ms,基本可确认为单元测试。
最关键的判断依据是测试是否访问真实外部依赖:单元测试中绝不允许出现 new HikariDataSource() 或 DriverManager.getConnection()。Codex 若误生成此类代码,会在沙箱执行阶段报错并自动回退重试。










