PMP Java 测试
如果可以访问 ..\..\copilot-instructions.md,请遵循其中的共享约束;此处引用不会自动激活这些约束。
操作步骤
- 明确目标行为、测试范围和请求的模式:提出方案、编写测试或运行测试。添加测试的请求默认采用“编写并运行”;测试覆盖问题默认采用“仅提出方案”。VO、DTO、Feign client 接口、service 接口(纯字段容器或无逻辑的接口声明,不含实现类中的业务代码)不需要编写单元测试;测试应聚焦在有实际业务逻辑的类(如 ServiceImpl、Controller、工具类、Repository 自定义实现等)。
- 阅读目标代码及其附近的现有测试。在符合现有做法的前提下,使用 JUnit 5、Mockito 和独立模式的 MockMvc;不要无必要地添加测试依赖。
- 执行前检查安全性,可行时运行有针对性的基线检查。模拟所选代码使用的 Feign、Redis、AMQP 及其他外部交互;默认避免启动完整应用上下文。
- 覆盖有意义的载荷契约、参数/结果传递以及相关错误路径。不要仅检查 HTTP 200 和 JSON 类型,也不要编造现有异常处理/配置契约中不存在的错误行为。
- 编写测试后,使用精确的测试选择器运行并检查差异。核实 Java 类名,不要根据文件名猜测。
- 遵守 SonarQube 规则,避免引入常见的可预测告警:变量/循环变量命名避免使用
record等受限标识符(S6213);日期字面量使用java.time.Month等枚举常量而非裸整数(S8694,如LocalDate.of(2026, Month.MARCH, 15));数值断言优先使用isZero()/isPositive()等语义化断言而非isEqualTo(0)(S5838);单个测试方法内的断言数量应控制在 25 个以内,超出时按场景拆分为多个测试方法或提取共享的私有构造/结果获取方法(S5961)。
项目专用测试选择器
src\test\java\com\spl\pmp\service\lease\notification\controller\EmailTemplateControllerTest.java 当前声明的是包级私有类 ApprovalFlowControllerTest,使用 MockitoExtension、模拟的 service、注入的 controller 和独立模式的 MockMvc。使用 mvn -Dtest=ApprovalFlowControllerTest test 前,请重新核实类声明。不要顺手重命名现有类或文件。
任务边界
- 修改仅限测试范围。若生产代码缺陷或可测试性问题需要修改生产代码,应先说明原因并获得明确批准,再进行修改。
- 在“仅提出方案”模式下,不得编辑或执行。在“仅运行”模式下,不得编辑。
- 不得通过弱化断言来掩盖失败,也不得添加真实服务的凭据。
- 编写/修改代码时不要自动添加注释或
@Schema(description = ...)等接口文档注解;仅在用户明确要求时才添加。
证据与完成标准
列出测试场景、测试文件、实际执行的完整命令及结果,以及受阻或跳过的覆盖项。提出的测试不等于已经执行的测试。完成任务需交付所请求范围的测试并通过针对性检查;否则,应明确记录阻碍并标明未验证状态。