我正在为一个方法编写一个junit测试,在其中我要调用一个返回ByteBuffer的方法。我正在尝试模拟方法调用,但是字节缓冲区仍然抛出空指针异常。这是我第一次使用Mockito编写junit测试。
我的功能-
public void myfunc(){
CallMyClass cl=new CallMyClass();
// getBody() return ByteByffer
final byte[] response = cl.getBody().array();
}
测试-
@Mock
CallMyClass cl;
public void test_myfunc(){
when(this.cl.getBody().array()).thenReturn("fddf".getBytes())
}
我继续在cl.getBody()。array()代码行上获取空指针异常。
答案 0 :(得分:1)
我怀疑您误解了嘲讽的工作原理。
模拟的标准格式为when(mock.method(argumentMatchers)).thenReturn(...)
。因此,在您的情况下,cl.getBody()
需要返回模拟的对象,when
才能正常工作。但是显然,如果您没有嘲笑cl.getBody()
的返回,那将不会发生。
事实上,您的myfunc
甚至没有通过CallMyClass
;而是构造一个。因此,实际上没有办法模拟其收益。
示例的标准可测试格式为:
public void myfunc(CallMyClass cl) {
final byte[] response = cl.getBody().array();
...
}
@Test
void testMyFunc() {
CallMyClass cl = mock(CallMyClass.class);
ByteBuffer buf = mock(ByteBuffer.class);
when(cl.getBody()).thenReturn(buf);
when(buf.array()).thenReturn("fdafds".getBytes());
assertThat(myFunc(cl))...
}