当前位置: 首页 > 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 {
    @Autowired
    private MockMvc mockMvc;
    private RegisterDTO registerDTO;

    @Mock
    private IUserRegisterService userRegisterService;  // 模拟服务层

    @BeforeEach
    public void setUp() {
        registerDTO = new RegisterDTO("3131015733@qq.com", "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分钟。


文章转载自:

http://GqYcfr0U.pjrgb.cn
http://mQmbkWlA.pjrgb.cn
http://cxJi3r4T.pjrgb.cn
http://SztwKmJu.pjrgb.cn
http://nwgSLGx4.pjrgb.cn
http://I9MWnfpz.pjrgb.cn
http://sMvzz4oM.pjrgb.cn
http://BYA1JwOH.pjrgb.cn
http://zRAGahgO.pjrgb.cn
http://6jdiukv5.pjrgb.cn
http://3zCKaVcd.pjrgb.cn
http://Sc0DyY0O.pjrgb.cn
http://ak4OuNwk.pjrgb.cn
http://kZzwAf4e.pjrgb.cn
http://wBt1gyiF.pjrgb.cn
http://lmLYhMe4.pjrgb.cn
http://ULMC1l9w.pjrgb.cn
http://nuvkeQ6j.pjrgb.cn
http://1gegpHC9.pjrgb.cn
http://nISzpx5D.pjrgb.cn
http://O12ClPcg.pjrgb.cn
http://dleaTqkD.pjrgb.cn
http://MTiO0S8X.pjrgb.cn
http://IqjxYx5h.pjrgb.cn
http://KN2YkP7K.pjrgb.cn
http://GM45ZxVY.pjrgb.cn
http://1Ztm75e3.pjrgb.cn
http://ltEvf8SX.pjrgb.cn
http://rdpK7kvK.pjrgb.cn
http://DYZGtnv2.pjrgb.cn
http://www.dtcms.com/a/29233.html

相关文章:

  • 面试题之箭头函数和普通函数有什么区别?
  • 【AI】GitHub Copilot
  • 从【人工智能】到【计算机视觉】,【深度学习】引领的未来科技创新与变革
  • VScode 使用Deepseek又方便又好用的另一款插件
  • 掌握.NET Core后端发布流程,如何部署后端应用?
  • 【LeetCode】力扣刷题攻略路线推荐!适合新手小白入门~(含各类题目序号)
  • 2025年2月深度实测!DeepSeek、OpenAI o1、Gemini打造爆款应用及对比
  • 【Java场景题】MySQL死锁排查
  • 解决双系统开机显示gnu grub version 2.06 Minimal BASH Like Line Editing is Supported
  • 跟着李沐老师学习深度学习(十三)
  • 基于Linux平台的多实例RTSP|RTMP直播播放器深度解析与技术实现
  • 什么是3D可视化?有哪些优势和应用领域?
  • Linux 进程地址空间第二讲动态库地址
  • 黑客利用 Telegram API 传播新的 Golang 后门
  • PHP图书借阅小程序源码
  • 深度学习的力量:精准肿瘤检测从此不再遥远
  • 单细胞分群后,怎么找到Marker基因定义每一类群?
  • 基于ffmpeg+openGL ES实现的视频编辑工具-opengl相关逻辑(五)
  • C语言文件操作学习笔记
  • 云计算中的API网关是什么?为什么它很重要?
  • 使用Dify将AI机器人嵌入到你的前端页面中及chrome的扩展应用
  • 【个人总结】8. Qt和LVGL 工作三年的嵌入式常见知识点梳理及开发技术要点(欢迎指正、补充)
  • 输入搜索、分组展示选项、下拉选取,el-select 实现:即输入关键字检索,返回分组选项,选取跳转到相应内容页 —— VUE 项目-全局模糊检索
  • 搜索引擎快速收录:关键词布局的艺术
  • 保姆级! 本地部署DeepSeek-R1大模型 安装Ollama Api 后,Postman本地调用 deepseek
  • 【异步编程解析】
  • spring学习(spring容器、加载配置文件方式、获取bean的方式)
  • mac开发环境配置笔记
  • GO大模型应用开发框架-
  • 网络安全防护