报错信息
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 注解的字段
}
@Test
public void testSelectOne() throws Exception {
// 准备测试数据
Serializable id = 1;
SysUser sysUser = new SysUser();
sysUser.setId(1L);
sysUser.setUserName("admain");
// 设置mock对象行为
// 设置sysUserService的 getById 方法的返回值为 sysUser
when(sysUserService.getById(id)).thenReturn(sysUser);
// 调用被测试的方法
// 调用 sysUserController 的 selectOne 方法,并传入 id 参数
ResponseResultSysUser> responseResult = sysUserController.selectOne(id);
// 如果 responseResult 的 Code 字段等于 200
// if (responseResult.getCode() == 200) {
// // 打印 responseResult 的 JSON 字符串形式
// System.out.println(JSON.toJSONString(responseResult));
// }
// 断言验证结果
asse服务器托管网rt (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;
@Test
public void testSelectOne() throws Exception {
// 准备测试数据
Serializable id = 1;
SysUser sysUser = new SysUser();
sysUser.setId(1L);
sysUser.setUserName("admain");
// 设置mock对象行为
// 设置sysUserService的 getById 方法的返回值为 sysUser
when(sysUserService.getById(id)).thenReturn(sysUser);
// 调用被测试的方法
// 调用 sysUserController 的 selectOne 方法,并传入 id 参数
ResponseResultSysUser> 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()));
}
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net