用途:为 Java SDK 表面区域创建 E2E 集成测试,测试通过回放代理(test/harness/replayingCapiProxy.ts)拦截对 Copilot API 的 HTTP 调用,并返回 YAML 快照中预录的响应,从而在 CI 中无需真实认证。仅当新测试覆盖 Java SDK 表面区域时使用;完全通过 SDK 可用的共享运行时功能应放在 TypeScript SDK 套件(nodejs/test/e2e/)。
主要能力与约束:Java 的 CapiProxy.start() 始终设置 GITHUB_ACTIONS=true,强制回放代理进入只读模式,因此 Java 测试不能录制快照,每个请求必须匹配已有快照。禁止手工编写模型响应,应复用其他 SDK 套件为同一对话录制的快照;若没有,则按指南通过 TypeScript SDK 套件以相同快照名和提示录制。
使用方式:先选择快照类别(test/snapshots/ 下的目录)与快照基础名(小写 snake_case 文件名主干),传给 configureForTest。测试类放在 java/sdk/src/test/java/com/github/copilot/,以 IT 结尾(如 MyFeatureIT.java),由 failsafe 插件识别。模板使用 E2ETestContext.create()、ctx.configureForTest、ctx.createClient()、client.createSession、session.sendAndWait 并断言响应。
回放规则:每个请求的 system 消息在匹配前替换为 ${system},因此无法断言系统消息设置到达模型;用户内容须与快照完全一致;${workdir} 代表测试临时工作目录;请求匹配到某条 assistant 消息即返回该消息及其后直接相连的 assistant 消息;无匹配则失败,stderr 会报告 No cached response found。
验证:在运行时仓库中先执行 pnpm run generate:sdk:java 与 pnpm run build:cli;pnpm run test:sdk:java 运行整个套件且不接受测试过滤。聚焦 Maven 运行时需显式传入同一检出包装器,并使用 verify 生命周期:cd src/sdk/java;./mvnw -pl sdk spotless:apply;COPILOT_CLI_PATH=<runtime-root>/dist-cli/prebuilds/<target>/copilot-runtime;./mvnw -pl sdk verify -Dit.test="MyFeatureIT#myTestMethod" -Dcopilot.cli.path="$COPILOT_CLI_PATH"。独立 SDK 仓库从 java/ 开始,使用固定运行时:./mvnw -pl sdk spotless:apply;./mvnw -pl sdk verify -Dit.test="MyFeatureIT#myTestMethod"。
限制:快照必须已存在且匹配;系统消息内容不参与比较;调用内置工具时 CLI 会在测试工作目录真实执行,需提前创建文件且内容与快照工具结果一致。