最终验证和AI重点测试:项目开发周期的最终环节 现在我们确认开发已经到了最终阶段。经过我们同大模型的确认有关任务除寻找测试数据存在困难外已全部完成。但这并不影响我们执行功能性测试。我们大量使用脚本进行了自动化测试对于重中之重的AI模块我们用了一点真实数据进行了单独的手动测试。确认开发全部完毕由于任务书中明确HTML和PDF两种形式我们预计只实现一种时间原因我们没有找到大量的可测试数据因此现在可以宣告开发任务已经顺利结束。AI相关功能验证涉AI功能作为整个项目的亮点我们选择了用一些真实的截图、图片进行手动验证。不再多说放截图。AI日报AI月报支持手动生成周报略AI饮食记录图片识别AI运动记录截图识别AI睡眠记录截图识别自动化测试文档我们的队友可能也进行了一些测试但这一测试工作我们之间独立进行以求尽可能多地发现漏洞和问题。 目录测试架构概览后端测试前端测试E2E 端到端测试如何运行测试CI/CD 流水线测试覆盖率测试架构概览AI-HEALTH/ ├── backend/ │ └── src/test/java/com/aihealth/ │ ├── BaseServiceTest.java # Service 层测试基类 │ ├── BaseControllerTest.java # Controller 层测试基类 │ ├── TestDataFactory.java # 测试数据工厂 │ ├── service/ # Service 层单元测试 │ │ ├── UserServiceTest.java │ │ ├── WeightRecordServiceTest.java │ │ ├── SleepRecordServiceTest.java │ │ ├── FoodRecordServiceTest.java │ │ ├── MoodRecordServiceTest.java │ │ ├── WorkoutServiceTest.java │ │ └── NotificationServiceTest.java │ ├── repository/ # Repository 集成测试 │ │ ├── UserRepositoryTest.java │ │ ├── WeightRecordRepositoryTest.java │ │ ├── SleepRecordRepositoryTest.java │ │ └── FoodRecordRepositoryTest.java │ ├── controller/ # Controller 集成测试 │ │ ├── UserControllerTest.java │ │ └── WeightRecordControllerTest.java │ └── util/ │ └── JwtUtilTest.java # JWT 工具测试 ├── frontend/ │ ├── src/__tests__/ │ │ ├── setup.js # Vitest 全局设置 │ │ ├── stores/ # Pinia Store 测试 │ │ │ ├── userStore.test.js │ │ │ ├── themeStore.test.js │ │ │ └── healthStore.test.js │ │ ├── components/ # Vue 组件测试 │ │ │ ├── StatCard.test.js │ │ │ └── Login.test.js │ │ ├── services/ # API 服务测试 │ │ │ └── api.test.js │ │ ├── router/ # 路由测试 │ │ │ └── router.test.js │ │ └── utils/ # 工具函数测试 │ │ └── commonUtils.test.js │ ├── e2e/ # Playwright E2E 测试 │ │ ├── auth.spec.js │ │ ├── health-records.spec.js │ │ └── settings.spec.js │ ├── vitest.config.js # Vitest 配置 │ └── playwright.config.js # Playwright 配置 ├── .github/workflows/ci.yml # GitHub Actions CI ├── run-tests.bat # Windows 一键测试脚本 └── run-tests.sh # Linux/Mac 一键测试脚本后端测试技术栈组件用途JUnit 5测试框架MockitoService 层 MockAssertJ流式断言Spring Boot Test集成测试上下文H2 Database内存数据库MockMvcREST 端点测试REST AssuredAPI 集成测试测试层次┌──────────────────────────────────────┐ │ Controller 集成测试 │ ← SpringBootTest MockMvc │ (UserControllerTest, etc.) │ 完整 Spring 上下文 H2 ├──────────────────────────────────────┤ │ Service 单元测试 │ ← ExtendWith(MockitoExtension) │ (UserServiceTest, etc.) │ Mock Repository测业务逻辑 ├──────────────────────────────────────┤ │ Repository 集成测试 │ ← DataJpaTest H2 │ (UserRepositoryTest, etc.) │ 测 JPA 查询正确性 ├──────────────────────────────────────┤ │ Util 单元测试 │ ← 纯 JUnit 5 │ (JwtUtilTest) │ 无 Spring 依赖 └──────────────────────────────────────┘测试覆盖的功能✅ 用户注册/登录/信息获取/更新/修改密码✅ JWT 令牌生成/解析/验证✅ 体重记录 CRUD 批量删除 日期范围查询✅ 睡眠记录 CRUD 年月筛选 时间范围查询✅ 食物记录 CRUD FoodItem 级联 批量删除✅ 情绪记录 CRUD 批量操作✅ 锻炼记录 CRUD WorkoutItem 级联✅ 通知创建/获取/标记已读✅ 异常处理与错误码前端测试技术栈组件用途Vitest测试运行器兼容 Vitevue/test-utilsVue 组件挂载与交互happy-dom轻量 DOM 模拟Pinia状态管理测试测试覆盖的功能✅Pinia Stores: userStore认证、themeStore主题、healthStore健康数据✅Vue 组件: StatCard统计卡片、Login登录表单✅API 服务层: 所有 API 调用函数food/exercise/sleep/weight/mood✅路由配置: 所有 12 条路由映射验证✅工具函数: 日期格式化、Base64 转换、ID 清理、照片解析E2E 端到端测试技术栈组件用途Playwright跨浏览器 E2E 测试Chromium / Firefox / Mobile Chrome多平台覆盖测试覆盖的功能✅认证流程: 登录页面加载、未登录重定向✅页面可访问性: 所有 12 个页面能否正常加载✅健康记录管理: 食物/运动/睡眠/体重/情绪页面✅用户设置: 设置页、个人资料页✅仪表盘: 欢迎信息展示✅响应式设计: 移动端(375px)、平板(768px)、桌面(1920px)如何运行测试前置条件Java 21 Maven后端Node.js 20前端前端依赖已安装cd frontend npm install运行全部测试推荐Windows:.\run-tests.batLinux/Mac:chmodx run-tests.sh ./run-tests.sh分别运行后端测试# 运行所有后端测试cdbackend mvntest-Dspring.profiles.activetest# 只运行 Service 层测试mvntest-Dtestcom.aihealth.service.*# 只运行 Controller 集成测试mvntest-Dtestcom.aihealth.controller.*# 只运行 Repository 测试mvntest-Dtestcom.aihealth.repository.*# 运行特定测试类mvntest-DtestUserServiceTest前端单元测试cdfrontend# 运行所有测试npmtest# 监听模式开发时推荐npmrun test:watch# 生成覆盖率报告npmrun test:coverage# 运行特定测试文件npx vitest run src/__tests__/stores/userStore.test.jsE2E 测试cdfrontend# 确保前端 dev server 已启动npmrun dev# 另一个终端中运行 E2Enpx playwrighttest# UI 模式可视化调试npmrun test:e2e:ui# 只运行特定 specnpx playwrighttestauth.spec.jsCI/CD 流水线GitHub Actions推送代码到main或develop分支时自动触发。流水线阶段:后端测试— Maven 运行单元 集成测试前端测试— Vitest 运行组件 Store 工具测试E2E 测试— Playwright 多浏览器测试测试摘要— 汇总所有结果配置文件:.github/workflows/ci.yml测试结果制品 后端:backend/target/surefire-reports/ 前端:frontend/coverage/ E2E:frontend/playwright-report/️ 失败截图:frontend/test-results/测试覆盖率后端覆盖率cdbackend mvntestjacoco:report# 报告位置: backend/target/site/jacoco/index.html前端覆盖率cdfrontendnpmrun test:coverage# 报告位置: frontend/coverage/index.html这是其中一次测试的运行结果尽管有鲜红的1 failed大模型还是宣告测试是通过的相信是存在一些人为控制不了的因素经查不影响正常使用不排除是脚本问题。编写新测试的最佳实践命名规范:{ClassName}Test.java(后端) 或{name}.test.js(前端)使用 TestDataFactory: 复用测试数据构建方法每个测试只验证一个行为: 遵循 AAA 模式 (Arrange → Act → Assert)DisplayName / describe: 使用中文描述测试意图Mock 外部依赖: Service 测试 Mock Repository; API 测试 Mock Axios清理测试数据: 使用BeforeEach或beforeEach重置状态由此开发测试工作结束但愿验收可以通过。