0


单元测试-java.lang.NullPointerException

报错信息

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

来源

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

解决

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

测试例子

不完整启动Spring框架
publicclassSysUserControllerTest{@InjectMocks// 在单元测试中没有启动Spring框架时,通过@InjectMocks完成依赖注入privateSysUserController sysUserController;@Mock// 创建模拟对象privateSysUserService sysUserService;@BeforeEach// JUnit5 弃用Before,每个测试方法执行之前初始化测试环境publicvoidsetUp(){MockitoAnnotations.openMocks(this);// 初始化被@Mock、@Spy、@Captor 和 @InjectMocks 注解的字段}@TestpublicvoidtestSelectOne()throwsException{// 准备测试数据Serializable id =1;SysUser sysUser =newSysUser();
        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
@SpringBootTestpublicclassSysUserControllerTest{@Autowired// @SpringBootTest完整启动Spring框架时,通过@Autowired完成依赖注入privateSysUserController sysUserController;@Mock// 创建模拟对象privateSysUserService sysUserService;@TestpublicvoidtestSelectOne()throwsException{// 准备测试数据Serializable id =1;SysUser sysUser =newSysUser();
        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 log4j

本文转载自: https://blog.csdn.net/yjj1123456/article/details/134574418
版权归原作者 猫三棂 所有, 如有侵权,请联系我们删除。

“单元测试-java.lang.NullPointerException”的评论:

还没有评论