2017-11-26 6 views
0

IOExceptionがスローされていて、正しい[String]の値が返されているかどうかをテストします。私は唯一の例外メッセージや他のものをチェックすることができるが、私は主張することはできません「[]」例外がスローされた後にTry構造体で正しい戻り文字列をテストする方法はありますか?

def readJsonFile(myJson: String): String = 
    Try { 
    FileSystems.getDefault().getPath(myJson) 
    } match { 
    case Success(path) => new String(Files.readAllBytes(path)) 
    case Failure(ioe: IOException) => "[]" 
    case Failure(e) => sys.error(s"There was a problem with: $e") 
    } 

は私がassertThrows[IOException]intercept[IOException]をチェックするが、彼らはだけではなく、戻り値のため、私は一般的な例外のものをチェックしてみましょうこの種の例外がスローされた場合に備えて私は何か見落としていますか?

これを達成する最も簡単な方法は何ですか?

答えて

4

ここでの問題はIOExceptionTryの外側にスローされることです。 Tryのファイルを読むと、それはあなたの期待を満たすかもしれません:

def readJsonFile(myJson: String): String = 
    Try { 
    Files.readAllBytes(FileSystems.getDefault().getPath(myJson)) 
    } match { 
    case Success(bytes) => new String(bytes) 
    case Failure(ioe: IOException) => "[]" 
    case Failure(e) => sys.error(s"There was a problem with: $e") 
    } 
+0

はい、それはまさに問題でした。ありがとうございました!私が最後の 'case Failure(e)=> sys.errorをどのようにテストすることができるのか、考えてみましょう:$ e") ''? – user3350744

+0

予期しない例外をテストできるとは思いません。シナリオがある場合は、スカラテスト・インターセプト機能を使用できます。例外が予想される場合です。例外がスローされない場合、テストは失敗します。このブログ記事は、非常に明確に説明しています。https://alvinalexander.com/scala/scalatest-testing-expected-exceptions-intercept-testfailedexception – Feyyaz

+0

(['new String(bytes)'](https://docs.oracle.com /javase/9​​/docs/api/java/lang/String.html#String-byte:A-)も例外をスローする可能性があります(何が起こるかは指定されていません)。既知の 'Charset'と失敗を処理する。) –

関連する問題