SpringBoot 单元测试调用getUser接口未返回预期400错误如何解决
问题原因及修复方案
1. 核心问题:Mock参数不匹配
你在单元测试中对userService.getUser()方法打桩时,指定的入参是全大写的"TEST",但实际发起MockMvc请求时传递的username参数是首字母大写的"Test"。Mock的方法触发规则是参数完全相等匹配,二者字符串内容不一致,导致你定义的抛异常逻辑没有触发,Mock会返回默认值null,最终测试结果不符合预期。
2. 次要问题:Mock异常与实际业务逻辑不一致
你的业务层代码中,用户不存在时抛出的是状态码为HttpStatus.BAD_REQUEST的异常,但测试中Mock抛出的是HttpStatus.NOT_FOUND类型的异常。虽然当前控制层是捕获所有Exception统一返回400,暂时不影响本次测试结果,但不符合真实业务场景的模拟,后续如果控制层调整了不同异常的处理逻辑,会导致测试失效。
修正后的测试代码
@Test @WithMockUser(username = "admin", authorities = {"ADMIN"}) public void shoulThrowExceptionGettingUser() throws Exception { // 入参和后续请求的参数保持一致,异常类型和业务实际抛出的一致 doThrow(new ResponseStatusException(HttpStatus.BAD_REQUEST)) .when(userService).getUser("Test"); MvcResult s = mvc.perform(get("/api/user") .contentType(MediaType.APPLICATION_JSON) .param("username","Test")) .andDo(print()) .andExpect(status().isBadRequest()) .andReturn(); }
内容的提问来源于stack exchange,提问作者thomas1413
相关产品推荐
相关产品推荐

