改BUG:Mock测试的时候,when失效
- 电脑硬件
- 2025-08-23 04:00:02

问题再现:
这里我写了一测试用户注册接口的测试类,并通过when模拟下层的服务,但实际上when并没有奏效,还是走了真实的service层的逻辑。
package cn.ac.evo.review.test; import cn.ac.evo.review.user.UserMainApplication; import cn.ac.evo.review.user.register.controller.UserRegisterController; import cn.ac.evo.review.user.register.model.dto.RegisterDTO; import cn.ac.evo.review.user.register.service.IUserRegisterService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.web.servlet.MockMvc; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; /** * @author urfread * @date 2025-02-20 09:34 */ @SpringBootTest(classes = UserMainApplication.class) @AutoConfigureMockMvc public class UserRegisterTest { @Autowired private MockMvc mockMvc; private RegisterDTO registerDTO; @Mock private IUserRegisterService userRegisterService; // 模拟服务层 @BeforeEach public void setUp() { registerDTO = new RegisterDTO("3131015733@qq ", "123456", "123456"); } // 测试邮箱是否已注册 @Test public void testCheckEmailRegisteredSuccess() throws Exception { // 模拟服务层返回的结果 when(userRegisterService.checkEmailRegistered(registerDTO.getEmail())).thenReturn(true); mockMvc.perform(get("/api/user/register/checkEmailRegistered") .param("email", registerDTO.getEmail())) .andExpect(status().isOk()) .andExpect(content().string("true")); } @Test public void testCheckEmailRegisteredFail() throws Exception { // 模拟服务层返回的结果 when(userRegisterService.checkEmailRegistered(registerDTO.getEmail())).thenReturn(false); mockMvc.perform(get("/api/user/register/checkEmailRegistered") .param("email", registerDTO.getEmail())) .andExpect(status().isOk()) .andExpect(content().string("false")); } } 解决只改一行就可以
@Mock private IUserRegisterService userRegisterService; // 模拟服务层把这里的 @Mock 改为 @MockBean,然后 when 就又奏效了。 就是这么简单,有研究了20分钟。
改BUG:Mock测试的时候,when失效由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“改BUG:Mock测试的时候,when失效”
上一篇
DApp开发入门指南
下一篇
GO大模型应用开发框架-