我正在使用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);
}
}
3条答案
按热度按时间hiz5n14c1#
您有一些类可以相互调用其他方法,因此最好使用
Mockito.RETURNS_DEEP_STUBS
在您的案例中:
A
正在呼叫B
,而B
正在呼叫C
只需替换:
具有:
tktrz96b2#
不调用
when(...).thenReturn(...)
可能有多种原因:1.当构造不完全匹配时,在中使用的数据类型,例如,如果您有一个字符串并传递null,则它不是相同的方法调用
1.确保使用相同的方法初始化对象。Spring注入的资源与使用new运算符创建的资源不同
kknvjkwl3#
使用@InjectMock和@Mock来解决此问题