@WebMvcTest测试通过但IntelliJ未统计Controller代码覆盖
解决@WebMvcTest测试通过但Controller未被代码覆盖统计的问题
可能原因及修复步骤
1. 确认Controller类被纳入覆盖率统计范围
- 打开IntelliJ的Run/Debug Configurations,找到对应测试类的配置,切换到Code Coverage标签
- 检查Packages and classes列表,确保
DepartmentController所在的包(如com.yourproject.controller)被包含,且未被排除
2. 确保测试触发了Controller的核心逻辑
当前测试仅验证响应状态码,可能未覆盖Controller内的业务分支(如DTO转换、参数校验等)。修改测试,增加响应体断言,确保Controller逻辑被执行:
@Test void Get_Department_Returns_200_Ok_When_Department_Present() throws Exception { Department dept = new Department(1, "Tech"); Optional<Department> deptOptional = Optional.of(dept); when(departmentService.getDepartment(1)).thenReturn(deptOptional); // 模拟Controller的DTO转换逻辑(根据实际业务调整) DepartmentDTO expectedDto = modelMapper.map(dept, DepartmentDTO.class); mockMvc.perform(get("/department/{id}", 1) .contentType("application/json")) .andExpect(status().isOk()) // 验证响应体,触发Controller的转换逻辑 .andExpect(content().json(objectMapper.writeValueAsString(expectedDto))); }
3. 检查@WebMvcTest的配置有效性
- 确认
DepartmentController的@RequestMapping路径与测试中的/department/{id}完全匹配,比如Controller类是否标注@RequestMapping("/department"),方法上是否为@GetMapping("/{id}") - 若项目有自定义扫描范围,确保
DepartmentController在@SpringBootApplication或@ComponentScan的扫描范围内,且@WebMvcTest未通过excludeFilters排除该类
4. 清理并重新生成覆盖率报告
- 删除项目根目录下旧的覆盖率数据(通常在
target/coverage或build/reports/coverage目录) - 右键测试类,选择Run 'DepartmentControllerTest' with Coverage重新生成报告
5. 确认测试运行器配置正确
确保测试类未手动指定其他运行器,@WebMvcTest默认使用SpringRunner,额外指定可能导致Controller未被加载:
@WebMvcTest(DepartmentController.class) public class DepartmentControllerTest { // 测试代码 }
内容的提问来源于stack exchange,提问作者Toji
相关产品推荐
相关产品推荐

