测试与调试
2026/4/30
第十六章:测试与调试
12 个企业级实战项目 · 源码 + 教程 + 答疑
简历包装指导AI Agent 实战高并发·微服务Offer 导向持续更新2900+ 同行交流3 天包退
16.1 单元测试:把不确定性隔离在边界
AI 输出天然不确定,因此测试策略要反过来做:
- 核心业务逻辑尽量做成确定性:参数校验、路由选择、工具调用结果拼装、缓存策略、限流策略
- 不确定性集中在边界:真正的模型调用
单元测试的目标不是“断言模型输出的每个字”,而是断言:
- 你给模型的输入是否符合预期(prompt 结构、工具列表、约束)
- 你对模型输出的解析是否健壮(结构化解析、兜底策略)
- 出错时是否走了正确的重试/降级路径
16.2 集成测试:Mock 供应商响应
集成测试建议覆盖两类路径:
- 正常路径:返回结构符合预期
- 异常路径:429/5xx/超时,验证重试与降级
如果你的 Spring AI 版本允许自定义底层 HTTP 客户端,常用做法是用 MockWebServer 来伪造供应商 API;如果不方便,也可以在测试 Profile 下替换 ChatClient Bean。
16.2.1 用 Test Profile 替换 ChatClient(思路)
package com.example.testing;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
@TestConfiguration
public class FakeAiConfig {
@Bean
public ChatClient chatClient() {
return new FakeChatClient();
}
}FakeChatClient 里返回固定输出,这样 Service 层测试就稳定了。
16.3 Mock测试:推荐测“你自己的逻辑”
建议优先写以下单测(命名风格:should_xxx_when_xxx):
- should_returnCachedResponse_when_samePromptProvided
- should_throwValidationError_when_toolArgsInvalid
- should_fallback_when_providerRateLimited
- should_routeToReasoningModel_when_taskTypeIsReasoning
16.4 调试技巧:让问题可复现
调试 AI 应用的第一原则:让问题可复现。
实用技巧:
- 把关键请求参数(模型名、温度、maxTokens、消息条数、prompt 长度)记录到日志(脱敏)
- 为每次 AI 调用生成 requestId,串联日志与指标
- 对异常输出保留“原始响应片段”(脱敏后),便于定位解析失败
当你做到“可复现”,AI 应用的调试难度会迅速下降。
12 个企业级实战项目 · 源码 + 教程 + 答疑
简历包装指导AI Agent 实战高并发·微服务Offer 导向持续更新2900+ 同行交流3 天包退
