私はインターフェースを持っています:
public interface FileRepository {
String insert(File file) throws IOException;
// other methods ...
}
私の実装では、 (同時実行の問題を回避するために)ローカルinsert(File file)
を使用し、ファクトリ メソッドからチェック例外をスローします。java.security.MessageDigester
java.security.NoSuchAlgorithmException
public FileRepositoryImpl(String digestAlgo) throws NoSuchAlgorithmException {
this.digestAlgo = digestAlgo;
MessageDigest.getInstance(digestAlgo);
}
@Override
public String insert(File file) throws IOException {
// initialize message digest
MessageDigest messageDigest = null;
try {
messageDigest = MessageDigest.getInstance(digestAlgo);
} catch (NoSuchAlgorithmException e) {
LOGGER.fatal(MD_INIT_ERROR, e);
return null;
}
// other code ....
}
// other methods (may contain local MessageDigest)
私の実践:NoSuchAlgorithmException
常に致命的なエラー(モジュールが完全に使用できなくなります)であるためMessageDigest
、コンストラクターで a を初期化してパラメーターをテストしようとします。別の理由は、インターフェイスが定義によりスローを許可していないことです。digestAlgo
insert(File)
NoSuchAlgorithmException
私の質問: 私の実装では、コード
} catch (NoSuchAlgorithmException e) {
LOGGER.fatal(MD_INIT_ERROR, e);
return null;
}
到達することは決してないので、(論理的および実際的に)到達不能なコードを回避できる、より良い解決策があるはずだと思います。
解決策/提案は大歓迎です、ありがとう。
編集:
コードを実行するときは、実際には問題になりません。しかし、テストでは、コードに到達できないため、いくつかの「リソースを使用した try-catch」とともに、品質分析ツール (sonar、pmd) はコードを「単体テストによる不十分な分岐カバレッジ」と見なし、これは主要な問題です。レポートを分析するため、このコードは避けたいと思います。
MessageDigest.getInstance(digestAlgo);
別の質問ですが、コンストラクターでテストするのは良い習慣ですか? それともinsert(File)
、NoSuchAlgorithmException
?