模拟java.nio.ByteBuffer类时的java.lang.UnsupportedOperationException

时间:2017-11-01 01:40:49

标签: java unit-testing junit mockito

我正在尝试使用Mockito在java.nio中模拟ByteBuffer类,以便在JUnit中进行测试。我得到java.lang.UnsupportedOperationException

我的代码看起来像 -

class TestClass {

    @Mock
    private ByteBuffer byteBuffer

     @Before
     public void setup() {
         Mockito.when(byteBuffer.array()).thenReturn("some-string".getBytes()); //this line throws java.lang.UnsupportedOperationException
     }
}

我应该如何模拟数组方法才能使其工作?我使用的是Java 8。

2 个答案:

答案 0 :(得分:4)

Sotirios Delimanolis的评论一样,您不需要模拟此类或类似byte []等基元组成的类。

除了模拟之外,还有许多不同的test doubles(假货,间谍等),对于假货而言,这是一个更好的案例而不是模拟。

只需使用:

byteBuffer = ByteBuffer.wrap("some-string".getBytes());

答案 1 :(得分:2)

您获得java.lang.UnsupportedOperationException,因为ByteBuffer.array()是最终方法。因此,Mockito并没有嘲笑它。这意味着

Mockito.when(byteBuffer.array()).thenReturn("some-string".getBytes());

调用抛出异常的真实方法。