如何解决Mockito when方法不起作用并获取空指针异常
我正在使用Mockito和JUnit编写单元测试用例。但是在运行测试时得到NullPointerException
。在调试时,我知道方法when().thenReturn()
上的Mockito不会为依赖方法返回值,并且调用程序正在调用这些方法以获取结果。
下面是我的虚拟代码,以了解代码结构:
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);
}
}
解决方法
您有互相调用方法的类,因此最好使用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);
,
为什么没有调用when(...).thenReturn(...)
可能有多种原因:
- 当构造不完全匹配时使用的数据类型,例如,如果您有一个字符串并且传递了null,则它的方法调用不相同
- 确保使用相同的方法初始化对象。弹簧注入的资源与使用new运算符创建的资源不同
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。