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

单元测试-java.lang.NullPointerException

报错信息

java.lang.NullPointerException
空指针异常
空对象引用

来源

Controller层进行单元测试,解决完Spring上下文报错后继续报错。

解决

在测试方法执行前要为字段完成对象的注入,否则就报空指针异常。
在这里插入图片描述

测试例子

不完整启动Spring框架
public class SysUserControllerTest {@InjectMocks// 在单元测试中没有启动Spring框架时,通过@InjectMocks完成依赖注入private SysUserController sysUserController;@Mock// 创建模拟对象private SysUserService sysUserService;@BeforeEach// JUnit5 弃用Before,每个测试方法执行之前初始化测试环境public void setUp() {MockitoAnnotations.openMocks(this);// 初始化被@Mock、@Spy、@Captor 和 @InjectMocks 注解的字段}@Testpublic void testSelectOne() throws Exception {// 准备测试数据Serializable id = 1;SysUser sysUser = new SysUser();sysUser.setId(1L);sysUser.setUserName("admain");// 设置mock对象行为// 设置sysUserService的 getById 方法的返回值为 sysUserwhen(sysUserService.getById(id)).thenReturn(sysUser);// 调用被测试的方法// 调用 sysUserController 的 selectOne 方法,并传入 id 参数ResponseResult<SysUser> responseResult = sysUserController.selectOne(id);// 如果 responseResult 的 Code 字段等于 200
//        if (responseResult.getCode() == 200) {
//            // 打印 responseResult 的 JSON 字符串形式
//            System.out.println(JSON.toJSONString(responseResult));
//        }// 断言验证结果assert (responseResult.getData().getUserName().equals(sysUser.getUserName()));}
}
完整启动Spring框架

避免手动注入字段。
注意:完整启动的话->Mockito测试框架中来模拟一个对象的行为会失效(when()失效)。
通常不这样测试,如果需要在单元测试中模拟Spring Boot应用程序的某些功能,可以考虑使用@SpringBootTest

@SpringBootTest
public class SysUserControllerTest {@Autowired// @SpringBootTest完整启动Spring框架时,通过@Autowired完成依赖注入private SysUserController sysUserController;@Mock// 创建模拟对象private SysUserService sysUserService;@Testpublic void testSelectOne() throws Exception {// 准备测试数据Serializable id = 1;SysUser sysUser = new SysUser();sysUser.setId(1L);sysUser.setUserName("admain");// 设置mock对象行为// 设置sysUserService的 getById 方法的返回值为 sysUserwhen(sysUserService.getById(id)).thenReturn(sysUser);// 调用被测试的方法// 调用 sysUserController 的 selectOne 方法,并传入 id 参数ResponseResult<SysUser> responseResult = sysUserController.selectOne(id);// 如果 responseResult 的 Code 字段等于 200
//        if (responseResult.getCode() == 200) {
//            // 打印 responseResult 的 JSON 字符串形式
//            System.out.println(JSON.toJSONString(responseResult));
//        }// 断言验证结果assert (responseResult.getData().getId().equals(sysUser.getId()));}
}

相关文章:

单元测试-java.lang.NullPointerException

报错信息 java.lang.NullPointerException 空指针异常 空对象引用 来源 对Controller层进行单元测试&#xff0c;解决完Spring上下文报错后继续报错。 解决 在测试方法执行前要为字段完成对象的注入&#xff0c;否则就报空指针异常。 测试例子 不完整启动Spring框架 pub…...

机器学习数据集整理:图像、表格

前言 如果你对这篇文章感兴趣&#xff0c;可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」&#xff0c;查看完整博客分类与对应链接。 表格数据 Sklearn 提供了 13 个表格型数据&#xff0c;且数据处理接口统一&#xff1b;LIBSVM 提供了 131 个表格型数据&a…...

Vue: Cannot find module @/xx/xx/xx.vue or its corresponding type declarations.

编辑器&#xff1a;Webstorm项目技术栈&#xff1a;vitevuets解决 1.vite.config.js设置别名resolve: {alias: {: path.resolve(__dirname, ./src),}, }, 2.src下创建globals.d.ts//通用声明 // Vue declare module *.vue {import { DefineComponent } from vue;const componen…...

怎样自动把网页截图发到微信群里

现在很多公司都在使用企业微信了&#xff0c;不但方便公司内部交流和客户交流&#xff0c;还能组建各种小组群&#xff0c;业务群。企业微信群提供一个机器人的功能&#xff0c;方便我们把公司业务信息&#xff0c;或来自外部的信息自动发布到群里。 这里研究一下如何向微信群…...

Netty实现websocket且实现url传参的两种方式(源码分析)

1、先构建基本的netty框架 再下面的代码中我构建了一个最基本的netty实现websocket的框架&#xff0c;其他个性化部分再自行添加。 Slf4j public class TeacherServer {public void teacherStart(int port) throws InterruptedException {NioEventLoopGroup boss new NioEve…...

深入理解C语言指针:基础概念、语法和实际应用

导言&#xff1a; 在C语言编程中&#xff0c;指针是一个强大而灵活的概念&#xff0c;它直接涉及到内存的操作&#xff0c;为程序员提供了更多的控制权。本文将深入探讨C语言指针的基础概念、语法规则以及实际应用&#xff0c;帮助读者更好地理解和运用这一重要的编程工具。 1…...

百度云加速免费版下线,推荐几款目前仍旧免费的CDN

近日&#xff0c;百度云加速实施了新政策&#xff0c;将不再支持免费套餐服务。现在免费的CDN也越来越少了&#xff0c;推荐几款目前仍旧免费的CDN&#xff0c;大家且用且珍惜&#xff01; 1、雨云【点此直达】 源站为雨云产品可以免费使用CDN&#xff0c;源站非雨云产品流量包…...

HarmonyOS(五)—— 认识页面和自定义组件生命周期

前言 在前面我们通过如何创建自定义组件一文知道了如何如何自定义组件以及自定义组件的相关注意事项&#xff0c;接下来我们认识一下页面和自定义组件生命周期。 自定义组件和页面的关系 在开始之前&#xff0c;我们先明确自定义组件和页面的关系 自定义组件&#xff1a;Co…...

DevExpress WinForms TreeMap组件,用嵌套矩形可视化复杂分层数据

DevExpress WinForms TreeMap控件允许用户使用嵌套的矩形来可视化复杂的平面或分层数据结构。 DevExpress WinForms有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风…...

IO口速度影响了什么?

我们在初学单片机的时候都知道单片机GPIO的作用是巨大的&#xff0c;在配置GPIO的时候&#xff0c;结构体初始化里有一个选项是配置输入输出速度的&#xff0c;对于这个速度输出是必须要配置的&#xff0c;输入没有明令说明需不需要配置。 这个速度对于学习过32单片机的都应该知…...

Verilog基础:时序调度中的竞争(一)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 作为一个硬件描述语言&#xff0c;Verilog HDL常常需要使用语句描述并行执行的电路&#xff0c;但其实在仿真器的底层&#xff0c;这些并行执行的语句是有先后顺序…...

nginx 配置静态缓存全教程 (以及静态缓存文件没有生成)

一、第一步定义一个缓存目录设置目录结构 在 http 模块下定义(keys_zone 缓存区名&#xff1a;后面是缓存区大小 inactive 不活跃的文件多久清理 max_size 缓存区所占磁盘的上限 use_temp_path 默认关闭&#xff08;有需要自己百度&#xff09;) proxy_cache_path /path/your…...

自己动手打包构建编译cri-dockerd

1.背景 本机是 armv7l架构cpu&#xff0c;发现官方文档中竟然没有&#xff0c;因此需要自己编译下&#xff1b; [rootcontainer0 ~]# uname -a Linux container0 5.4.206-v7l.1.el7 #1 SMP Mon Jul 25 14:13:29 UTC 2022 armv7l armv7l armv7l GNU/Linux2.打包/构建/编译 gi…...

Self-Supervised Exploration via Disagreement论文笔记

通过分歧进行自我监督探索 0、问题 使用可微的ri直接去更新动作策略的参数的&#xff0c;那是不是就不需要去计算价值函数或者critic网络了&#xff1f; 1、Motivation 高效的探索是RL中长期存在的问题。以前的大多数方式要么陷入具有随机动力学的环境&#xff0c;要么效率…...

【网络奇幻之旅】那年我与区块链技术的邂逅

&#x1f33a;个人主页&#xff1a;Dawn黎明开始 &#x1f380;系列专栏&#xff1a;网络奇幻之旅 ⭐每日一句&#xff1a;追光的人&#xff0c;终会光芒万丈 &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️ 文章目录 &#…...

1.5.1 git/svn日志格式规范

文章目录 git日志规范一 基本原则二 日志格式1 type:2 keys3 subject4 body5 footergit日志规范 一 基本原则 《规则1》小步提交,每个功能模块分别提交 《规则2》源文件与修改文件,分别提交 《规则3》 二 日志格式 type:keys:subject:body:footer 1 type: - `feat`: 新…...

[autojs]ui线程中更新控件的值的问题

"ui"; ui.layout(<vertical><button id"autoFloatWindow" text"开启悬浮窗" textSize"15sp" /><button id"autoService" text"开启无障碍服务" textSize"15sp" /><button id"…...

机器视觉技术在现代汽车制造中的应用

原创 | 文 BFT机器人 机器视觉技术&#xff0c;利用计算机模拟人眼视觉功能&#xff0c;从图像中提取信息以用于检测、测量和控制&#xff0c;已广泛应用于现代工业&#xff0c;特别是汽车制造业。其主要应用包括视觉测量、视觉引导和视觉检测。 01 视觉测量 视觉测量技术用于…...

学习视频剪辑方法:AI智剪助力,批量处理短视频无忧

随着短视频的兴起&#xff0c;越来越多的人开始关注如何有效地制作和发布这些内容。但是&#xff0c;短视频的制作并不容易&#xff0c;要耗费大量的时间和精力。现在有很多AI智能剪辑工具可以快速、高效地制作短视频。其中&#xff0c;AI智剪是一款非常受欢迎的视频剪辑功能&a…...

振南技术干货集:制冷设备大型IoT监测项目研发纪实(3)

注解目录 1.制冷设备的监测迫在眉睫 1.1 冷食的利润贡献 1.2 冷设监测系统的困难 &#xff08;制冷设备对于便利店为何如何重要&#xff1f;了解一下你所不知道的便利店和新零售行业。关 于电力线载波通信的论战。&#xff09; 2、电路设计 2.1 防护电路 2.1.1 强电防护…...

揭秘低查重AI教材编写秘籍,AI写教材工具助你高效完成专业教材!

在教材编写过程中&#xff0c;如何平衡原创性与合规性是一个新的挑战。许多创作者往往在借鉴优秀教材的内容时&#xff0c;难免担心查重率超出标准&#xff1b;而在尝试独立撰写知识点时&#xff0c;又会顾虑逻辑是否严谨、信息是否准确。更重要的是&#xff0c;当引用他人的研…...

一文讲透Tabby的介绍、下载、安装、使用

目录 一.什么是Tabby&#xff1f; 1.用途 2.命名由来 二.下载Tabby 三.安装Tabby 四.使用Tabby 1.左下角搜索Tabby&#xff0c;单击打开 2.设置保险库&#xff08;该保险库用于存放每个SSH连接的密码&#xff0c;不设置的话就无法保存密码&#xff0c;也就无法成功进行…...

告别官方Example!手把手教你为Xilinx Aurora 8B/10B IP核定制自己的数据流(Vivado 2017.4)

从零构建Xilinx Aurora 8B/10B自定义数据流&#xff1a;实战指南 在FPGA高速串行通信领域&#xff0c;Xilinx的Aurora 8B/10B协议因其简洁高效而广受欢迎。然而&#xff0c;许多工程师在实际项目中都会遇到一个共同困境&#xff1a;官方提供的Example Design虽然功能完整&#…...

终极指南:如何在现代Windows上让经典游戏联机重生

终极指南&#xff1a;如何在现代Windows上让经典游戏联机重生 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 你是否曾经怀念那些经典的局域网游戏时光&#xff1f;《红色警戒2》、《暗黑破坏神》、《帝国时代》等经典游戏在现代…...

如何将网页内容快速转换为Markdown格式:MarkDownload完整使用指南

如何将网页内容快速转换为Markdown格式&#xff1a;MarkDownload完整使用指南 【免费下载链接】markdownload A Firefox and Google Chrome extension to clip websites and download them into a readable markdown file. 项目地址: https://gitcode.com/gh_mirrors/ma/mark…...

终极Windows系统优化工具:一键解决软件安装、系统优化和故障修复

终极Windows系统优化工具&#xff1a;一键解决软件安装、系统优化和故障修复 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 还在为Windows系…...

别再只盯着时序了!深入LPDDR4的ZQ校准,聊聊手机内存稳定性的幕后功臣

别再只盯着时序了&#xff01;深入LPDDR4的ZQ校准&#xff0c;聊聊手机内存稳定性的幕后功臣 当你在《原神》里释放大招时突然闪退&#xff0c;或是冬季户外拍摄4K视频遭遇卡顿&#xff0c;是否想过这些问题的根源可能藏在内存芯片里一组不起眼的电阻网络中&#xff1f;在LPDDR…...

告别命令行恐惧!用VSCode图形化搞定树莓派Pico开发(Windows保姆级教程)

告别命令行恐惧&#xff01;用VSCode图形化搞定树莓派Pico开发&#xff08;Windows保姆级教程&#xff09; 嵌入式开发向来以门槛高著称&#xff0c;尤其是面对复杂的命令行工具链时&#xff0c;许多初学者望而却步。树莓派Pico作为一款性价比极高的微控制器&#xff0c;其开发…...

YOLOv8性能跃迁:集成可变形注意力机制DAttention的实战指南

1. 为什么YOLOv8需要可变形注意力机制&#xff1f; 目标检测领域近年来最令人头疼的问题之一&#xff0c;就是模型在复杂场景下的表现不稳定。我在实际项目中遇到过这样的情况&#xff1a;同一个检测模型&#xff0c;在空旷场景下mAP能达到85%&#xff0c;但在人群密集的商场监…...

告别交叉调试:为你的ARM-Linux设备编译一个“原生”GDB调试器(基于Buildroot工具链)

告别交叉调试&#xff1a;为ARM-Linux设备构建原生GDB调试器的完整实践指南 当你在深夜调试一个边缘计算设备上的内存泄漏问题时&#xff0c;突然发现gdbserver与主机GDB版本不兼容&#xff0c;那种绝望感足以让任何嵌入式工程师崩溃。这正是为什么越来越多的开发者开始转向原生…...