当前位置: 首页 > news >正文

改BUG:Mock测试的时候,when失效

问题再现:

这里我写了一测试用户注册接口的测试类,并通过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 {@Autowiredprivate MockMvc mockMvc;private RegisterDTO registerDTO;@Mockprivate IUserRegisterService userRegisterService;  // 模拟服务层@BeforeEachpublic void setUp() {registerDTO = new RegisterDTO("3131015733@qq.com", "123456", "123456");}// 测试邮箱是否已注册@Testpublic 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"));}@Testpublic 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分钟。

http://www.lryc.cn/news/540173.html

相关文章:

  • 【自动化脚本工具】AutoHotkey (Windows)
  • 专题--Linux体系
  • 【DeepSeek】Mac m1电脑部署DeepSeek
  • Spring AI + Ollama 实现调用DeepSeek-R1模型API
  • 如何在本地和服务器新建Redis用户和密码
  • jmeter接口测试(一)
  • Java-11
  • js中常用方法整理
  • umi react+antd 判断渲染消息提示、input搜索、多选按钮组
  • Day15-后端Web实战-登录认证——会话技术JWT令牌过滤器拦截器
  • 【嵌入式常用工具】Srecord使用
  • SwiftUI基础组件之HStack、VStack、ZStack详解
  • 第2章 深入理解Thread构造函数
  • PLC扫描周期和工作原理
  • 玩转Docker | 使用Docker部署本地自托管reference速查表工具
  • MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 2
  • 跟着 Lua 5.1 官方参考文档学习 Lua (3)
  • ORM框架详解:为什么不直接写SQL?
  • 【Server Components 解析:Next.js 的未来组件模型】
  • 2025最新智能优化算法:改进型雪雁算法(Improved Snow Geese Algorithm, ISGA)求解23个经典函数测试集,MATLAB
  • 基于spring boot物流管理系统设计与实现(代码+数据库+LW)
  • HTTP 和RESTful API 基础,答疑
  • 【数据挖掘】深度挖掘
  • OpenGL(2)基于Qt做OpenGL开发
  • 使用JWT实现微服务鉴权
  • 高并发内存池项目介绍
  • PHP会务会议系统小程序源码
  • Java中的常用类 --String
  • PWM(脉宽调制)技术详解:从基础到应用实践示例
  • Hutool - DB 连接池配置集成