【问题标题】:Using mockito to mock response from a method which returns ByteBuffer使用 mockito 模拟来自返回 ByteBuffer 的方法的响应
【发布时间】:2020-02-14 03:34:10
【问题描述】:

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

【问题讨论】:

    标签: java junit mockito


    【解决方案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))...
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-07
      • 2016-10-23
      • 2020-01-21
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多