Mockito使用“ When ... thenReturn”返回内容导致NullPointerException

时间:2019-06-01 20:45:11

标签: junit mockito

我有一个名为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。有人可以帮忙吗?谢谢。

0 个答案:

没有答案