2017-11-01 17 views
2

JUnitでテストするために、java.nioのByteBufferクラスをMockitoでモックしようとしています。java.lang.UnsupportedOperationException java.nio.ByteBufferクラスをモックするとき

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.lang.UnsupportedOperationException

私のコードは次のように見え得ますか?私はJava 8を使用しています。

+0

このバッファがアクセス可能な配列によってサポートされていない場合、 'UnsupportedOperationException'がスローされることがjavadocに記載されています。あなたにはnullでないバッファを割り当てる必要があります。 – Alex

+3

なぜそれを嘲笑しますか?その 'getBytes'によって返された配列をラップして作成してください。 –

+0

@Alex私がオブジェクトを嘲笑しているなら、それにnullでないバッファをどうやって割り当てるのですか? – nishant

答えて

3

Sotirios Delimanolisのコメントのように、このクラスまたはbyte []のようなプリミティブから簡単に構成できるクラスをモックする必要はありません。

モックとは別に、test doubles(偽物、スパイなど)が多数あります。これはモックよりも偽装の方が優れています。

ちょうど使用:

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

はい、意味がありました。レッスンで学んだこと - オブジェクトをオーバーモックしないでください。 – nishant

1

ByteBuffer.array()が、最終的な方法であるため、あなたはjava.lang.UnsupportedOperationExceptionを取得します。したがって、それはMockitoによって嘲笑されません。つまり、例外をスローする実際のメソッドを呼び出すのは

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

です。

+0

この説明は根本的な原因を理解するのに役立ちます。 – nishant

関連する問題