Skip to content

Latest commit

 

History

History
339 lines (250 loc) · 7.47 KB

File metadata and controls

339 lines (250 loc) · 7.47 KB

Spring AI 测试指南

📋 测试概述

本项目为 momentTimeService.saveWall 方法创建了全面的测试套件,用于验证 Spring AI 集成是否正常工作。

测试文件列表

  1. MomentTimeServiceTest.java - 服务层单元/集成测试

    • 路径: src/test/java/com/slcp/devops/service/MomentTimeServiceTest.java
    • 测试内容: Service 层业务逻辑和 Spring AI 智能回复功能
  2. MomentTimeControllerTest.java - Controller 层 HTTP 接口测试

    • 路径: src/test/java/com/slcp/devops/controller/MomentTimeControllerTest.java
    • 测试内容: REST API 接口和端到端集成测试

🚀 快速开始

1. 运行所有测试

# 使用 Maven 运行所有测试
mvn test

# 只运行 MomentTime 相关的测试
mvn test -Dtest=MomentTimeServiceTest
mvn test -Dtest=MomentTimeControllerTest

2. 使用 IDE 运行测试

IntelliJ IDEA:

  • 打开测试文件
  • 点击类名或方法名旁边的绿色运行按钮
  • 或右键选择 "Run 'MomentTimeServiceTest'"

Eclipse:

  • 右键测试类文件
  • 选择 "Run As" -> "JUnit Test"

3. 运行单个测试方法

# 运行单个测试方法
mvn test -Dtest=MomentTimeServiceTest#testSaveWall_WithAiResponse

📊 测试详解

MomentTimeServiceTest - 服务层测试

测试1: 基础功能测试

testSaveWall_BasicFunction()
  • 目的: 验证留言墙保存的基本功能
  • 验证点:
    • 数据是否成功保存到数据库
    • 返回的实体是否包含正确的ID和字段
    • 数据库查询验证

测试2: Spring AI 回复功能测试 ⭐

testSaveWall_WithAiResponse()
  • 目的: 验证 Spring AI 集成是否正常工作
  • 验证点:
    • 小c机器人是否能成功回复
    • AI 服务配置状态检测
    • 降级处理验证(当 AI 未配置时)
    • 异步回复机制验证
  • 等待时间: 最多等待30秒获取AI回复
  • 关键点: 这是验证 Spring AI 功能的核心测试

测试3: 不同问题类型测试

testSaveWall_DifferentQuestions()
  • 目的: 验证 AI 能否处理多种类型的问题
  • 测试问题:
    • 自我介绍类问题
    • 技术性能优化问题
    • 技术概念解释问题
  • 注意: 需要 AI 服务已配置

测试4-7: 其他场景测试

  • 图片类型留言墙
  • 更新已存在的留言墙
  • AI 服务状态检查
  • 异步非阻塞验证

MomentTimeControllerTest - 接口层测试

接口测试1: 获取IP信息

testSignIp()
  • 接口: POST /momentTime/signip
  • 目的: 验证IP获取功能

接口测试2: 创建留言墙 ⭐

testInsertWall()
  • 接口: POST /momentTime/insertwall
  • 目的: 测试完整的留言墙创建流程和 AI 回复
  • 特点:
    • 发送HTTP请求创建留言
    • 等待15秒后检查AI回复
    • 端到端完整流程验证

接口测试3-8: 其他接口测试

  • 查询留言墙列表
  • 查询评论列表
  • 新增评论
  • 多条留言压力测试
  • 异常情况测试
  • 缓存功能验证

🔍 测试结果解读

成功标志

1. Spring AI 已配置且工作正常

✓ Spring AI 服务已配置并可用
✓ 留言墙保存成功,ID: 123
✓ 收到小c机器人回复 (等待5秒)
回复内容: Java学习需要循序渐进...
✓ Spring AI 生成的智能回复验证通过

2. Spring AI 未配置(降级处理)

⚠ Spring AI 服务未配置,测试将验证降级逻辑
✓ 留言墙保存成功,ID: 123
✓ 收到小c机器人回复 (等待3秒)
回复内容: AI服务暂未启用,小c暂时无法回复😢
✓ 降级处理验证通过

3. Spring AI 配置错误

✗ AI服务调用失败: Connection timeout
测试失败: AI服务配置存在问题

🛠️ 故障排查

问题1: 测试一直等待,没有收到AI回复

可能原因:

  1. AI 服务响应较慢
  2. AI API 配置错误
  3. 网络连接问题

解决方法:

# 1. 检查 application-dev.yml 中的 AI 配置
cat src/main/resources/application-dev.yml | grep -A 20 "spring.ai"

# 2. 查看日志输出
tail -f log/blog-dev.log | grep -i "ai\|spring.ai"

# 3. 增加测试等待时间(修改测试代码中的 maxWaitSeconds)

问题2: 测试失败 - NullPointerException

可能原因:

  • 依赖的服务未注入
  • 数据库连接问题

解决方法:

# 1. 确保数据库正常运行
mysql -u root -p -e "SHOW DATABASES;"

# 2. 检查 Spring Boot 启动日志
mvn spring-boot:run

# 3. 验证所有必需的 Bean 已注册

问题3: AI 服务未配置

解决方法:

# 在 application-dev.yml 中添加/检查配置
spring:
  ai:
    openai:
      api-key: your-api-key
      base-url: https://api.openai.com/v1
      model: gpt-3.5-turbo
    # 或者使用其他 AI 提供商

📈 测试报告

执行测试并生成报告

# 运行测试并生成 Surefire 报告
mvn clean test

# 查看报告
open target/surefire-reports/index.html

测试覆盖率

# 使用 JaCoCo 生成覆盖率报告
mvn clean test jacoco:report

# 查看覆盖率报告
open target/site/jacoco/index.html

✅ 验证清单

测试 Spring AI 是否正常工作,请按以下清单验证:

  • 运行 testSaveWall_BasicFunction - 验证基础功能
  • 运行 testSaveWall_WithAiResponse - 验证AI回复
  • 运行 testAiServiceStatus - 验证AI服务状态
  • 运行 testInsertWall - 验证HTTP接口
  • 检查日志中是否有 AI 相关错误
  • 验证小c机器人回复内容是否合理
  • 测试不同类型的问题是否都能得到回复

🔧 测试配置

测试数据库配置

确保 application-dev.ymlapplication-test.yml 中数据库配置正确:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database?useSSL=false
    username: root
    password: your_password

测试环境变量

可选:设置测试专用的环境变量

export SPRING_PROFILES_ACTIVE=test
export SPRING_AI_ENABLED=true

📝 日志查看

实时查看测试日志

# 查看应用日志
tail -f log/blog-dev.log

# 过滤 AI 相关日志
tail -f log/blog-dev.log | grep -i "ai\|小c机器人"

# 查看错误日志
tail -f log/blog-dev.log | grep ERROR

关键日志示例

成功的AI调用:

INFO - 小c机器人开始处理留言: 你好,Spring AI
INFO - AI响应时间: 1234ms
INFO - 小c机器人回复成功

AI服务未配置:

WARN - ChatClient not configured, using fallback response
INFO - 小c机器人: AI服务暂未启用

🎯 最佳实践

  1. 定期运行测试: 每次修改代码后都运行测试
  2. 关注AI响应时间: 如果响应时间过长,考虑优化或增加超时时间
  3. 测试数据清理: 测试会自动清理数据,但建议定期检查数据库
  4. 监控AI调用次数: 避免测试消耗过多的API配额
  5. 使用测试环境: 不要在生产环境运行这些测试

🆘 获取帮助

如果遇到问题:

  1. 查看测试日志输出
  2. 检查 log/blog-dev.log 文件
  3. 确认 Spring AI 配置正确
  4. 验证数据库连接正常
  5. 查看 AI_USAGE.md 了解 AI 服务配置详情

📚 相关文档


编写日期: 2025-10-27
测试框架: JUnit 5 + Spring Boot Test + MockMvc
Spring AI 版本: 根据项目 pom.xml