使用Mockito模拟返回ByteBuffer的方法的响应

时间:2020-02-14 03:34:10

标签: java junit mockito

我正在为一个方法编写一个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()代码行上获取空指针异常。

1 个答案:

答案 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))...
}