我有一个名为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,所以导致了NullPointerException。有人可以帮忙吗?谢谢。