2

クラスのテスト中に、クラスコンストラクターが「不正な引数」を取る可能性があることを発見しました。コンストラクターはURIを期待していました。明らかに、渡された引数がURIであることを示唆するものがない場合は、。をスローしますIllegalArgumentException

私のコンストラクターは、最初に渡された引数をテストして、それが有効なURIであるかどうかを確認しました(そこからファイルを作成することによって)。次に、これを変更してファイルの作成を試み、をキャッチしましたIllegalArgumentExceptioncatch私のブロックの本体では、私は単に次のことを行います。

throw new URISyntaxException(passedArgument, message)

これは、スローされる可能性のある例外をキャッチするための有効な方法ですか、それとも他の方法で実行する必要がありますか?

また、テスト中にこの問題を見つけたので、期待する例外をスローするようにコードを変更するだけで正当化されますか(これは、ユーザーに提示してログに記録するより明白なエラーです)?

編集1:コメントに応えて、これが私のコードの例です:

public myClass (String fileName) throws URISyntaxException {
    try {
        fileToRead = new File(fileName);

        if ( !fileToRead.canRead() ) { //confirm we can read the passed file
            // if not, throw a URI error
            throw new URISyntaxException(fileName, 'bad filename passed, please check path and try again');
        }
    } catch ( IllegalArgumentException e ) {
        throw new URISyntaxException(fileName, 'bad filename passed, please check path and try again');
    }
}

catch本質的に私の質問は、?のブロック内でURI例外をスローすることは有効ですIllegalArgumentExceptionか?これは有効な方法ですか、それとももっとうまくできますか?

4

2 に答える 2

5

はい、それは有効であり、ベスト プラクティスでもありますが、UriException ではなく、コンストラクター パラメーターが間違っていることを示すカスタム例外または IllegalArgumentException をスローする必要があります。

于 2012-12-30T18:07:12.250 に答える