Mockito when()方法不工作并获取空指针异常

x6yk4ghg  于 2022-11-08  发布在  其他
关注(0)|答案(3)|浏览(264)

我正在使用Mockito和JUnit编写单元测试用例。但是在运行测试时得到NullPointerException。在调试时,我了解到Mockito on方法:when().thenReturn()未返回相关方法的值,并且调用程序正在调用这些方法以获取结果。
下面是我的虚拟代码,以获得代码结构的想法:

class B {
  public C getValue() {
    return C;
  }
}

class A {
  public D getAns(String q1, String q2) {
    return B.getValue().map(mapper::toD); //null pointer exception start here 
  } 
}

@RunWith(MockitoJunitrunner.test)
class TestA {

  @InjectMock
  A a;

  @Mock
  B b;
  C c;

  init() {
    when(b.getValue()).thenReturn(c);
  }

  @Test
  public void getA() {
    D ans=A.getAns(q1,q2);  //getting null pointer exception here 
    AssertNotNull(ans);
  }
}
hiz5n14c

hiz5n14c1#

您有一些类可以相互调用其他方法,因此最好使用Mockito.RETURNS_DEEP_STUBS
在您的案例中:
A正在呼叫B,而B正在呼叫C
只需替换:

@InjectMock
  A a;

  @Mock
  B b;
  C c;

具有:

A a = Mockito.mock(A.class, Mockito.RETURNS_DEEP_STUBS);
B b = Mockito.mock(B.class, Mockito.RETURNS_DEEP_STUBS);
C c = Mockito.mock(C.class, Mockito.RETURNS_DEEP_STUBS);
tktrz96b

tktrz96b2#

不调用when(...).thenReturn(...)可能有多种原因:
1.当构造不完全匹配时,在中使用的数据类型,例如,如果您有一个字符串并传递null,则它不是相同的方法调用
1.确保使用相同的方法初始化对象。Spring注入的资源与使用new运算符创建的资源不同

kknvjkwl

kknvjkwl3#

使用@InjectMock和@Mock来解决此问题

相关问题