2017-09-22 1 views
-1

ユニットテストでは、次のように、IOExceptionをキャッチしようとしましたか?ユニットテストIOException

@Override 
public void renderOriginalContent(final Document document, final OutputStream outputStream, final User user) 
{ 
    if (Hibernate.isInitialized(document.getOriginalContent())) 
    { 
     try (final InputStream contentIS = document.getOriginalContent().getInputStream(); 
      final BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream)) 
     { 
      final byte[] buffer = new byte[4096]; 
      int read = contentIS.read(buffer); 
      while (read != -1) 
      { 
       bufferedOutputStream.write(buffer, 0, read); 
       read = contentIS.read(buffer); 
      } 
      logDocumentAccessEvent(user, document); 
     } 
     catch (final IOException e) 
     { 
      throw new RuntimeException(e); 
     } 
    } 
    else 
    { 
     renderOriginalContent(document.getId(), outputStream, user); 
    } 
} 

私は、IOExceptionをスローするように変更しようとしている一般的なテスト方法を持っています。誰かがIOExceptionを取得する方法に任意の答えを持っていますか?

+2

[Mockito](http://site.mockito.org/)の使用はいかがですか? – Thibstars

+0

上記のテストでは、例外をスローしない*場合、テストは合格になります。少なくとも私はあなたのtryブロック内でfail()ステートメントを使用したいと思います。 –

答えて

1

あなたは笑うでしょう:関数を呼び出す前に出力ストリームを閉じます。

+0

関数呼び出しの直前でoutputStream.close()を試しましたが、例外をトリガーしません。私は何か間違っているのですか? – user3586417

+0

それは_any_例外をトリガーしませんか? 'write()'を呼び出さないように、あなたのドキュメントは空でしたか? –

+0

outputStreamがクローズされていてもnullになっているにもかかわらず、正常に処理できます。ドキュメントは空ではありません。 – user3586417

0

あなたが使用しようとしているドキュメントをnullにしてください。

+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューの投稿](/レビュー/低品質の投稿/ 17421435) –

0

例外をスローしてテストメソッドで使用する独自のテストOutputStreamを実装できます。そして、あなたはしかし、あなたがのRuntimeExceptionとしてIOExceptionが再スローされていないので、あなたの投げた後、それはもはやIOExceptionがあることに注意して

@Test(expected = IOException.class) 

でテストメソッドに注釈を付けることができます。