junit - 使用“When ... thenReturn”返回的 Mockito 导致 NullPointerException
问题描述
我有一个名为 Person 的第三方类,一种方法是返回一个字符串:
public class Person<T> {
public String getName(Object<T> obj) {
// some code here
return "some string"
}
还有另一个第三方类 SomeClass,一种方法是返回一个 Person 对象:
public class SomeClass {
public <T> Person<T> createPerson(Object obj) {
// some code here
return new Person<T>(....)
}
}
我的类使用上述两个类首先创建一个人,然后获取人名。我无法对 MyClass 进行更改,因为它已成功通过系统测试:
public class MyClass {
public String myMethod() {
Person<T> person = someClass.createPerson(obj);
return person.getName(...);
// NullPointerException when junit because "person" object is null
}
}
现在我正在使用 junit 来测试 MyClass 以满足代码覆盖率要求。出于某种原因,当 junit 调用 person.getName() 时,它总是给我 NullPointer 异常。
public class MyClassTest {
@MockBean
private SomeClass someClass;
@Autowired
private MyClass myClass;
@Test
public void test(){
Person<Student> studentPerson =
(Person<Student>)Mockito.mock(Person.class);
Mockito.when(someClass.createPerson(ArgumentMatchers.any()))
.thenReturn(studentPerson);
Mockito.when(studentPerson.getName(ArgumentMatchers.any()))
.thenReturn("some data");
// call real method
myClass.myMethod(); // failed with NullPointerException
我不知道为什么 studentPerson 没有被正确地模拟导致 NullPointerException 因为它是 Null。有人可以帮忙吗?谢谢。
解决方案
推荐阅读
- c++ - 我正在尝试了解 GameGuardian speedhack 的工作原理,但我遇到了不可思议的事情
- linux - 如何通过 wsl2 将 pgAdmin 隧道传输到 CF 数据库服务?
- ios - 在 UI 测试中检测粘贴通知?
- resteasy - 如何在 Quarkus 的 Microprofile RestClientBuilder Provider 中设置 URI
- javascript - Extjs:使用商店获取 csv 文件
- ios - 如何在 ios Obj c 中集成 Google reCaptcha
- python - jange 包错误:确保使用为 python 安装的正确版本的 pip
- php - 你如何使保存按钮在 Laravel (DataTables) 中工作?
- android - 如何以新的方式从对话中获取结果?
- javascript - 按下提交按钮时表单未提交输入