0

私はインターフェースを持っています:

public interface FileRepository {
    String insert(File file) throws IOException;
    // other methods ...
}

私の実装では、 (同時実行の問題を回避するために)ローカルinsert(File file)を使用し、ファクトリ メソッドからチェック例外をスローします。java.security.MessageDigesterjava.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 を初期化してパラメーターをテストしようとします。別の理由は、インターフェイスが定義によりスローを許可していないことです。digestAlgoinsert(File)NoSuchAlgorithmException

私の質問: 私の実装では、コード

   } catch (NoSuchAlgorithmException e) {
        LOGGER.fatal(MD_INIT_ERROR, e);
        return null;
   }

到達することは決してないので、(論理的および実際的に)到達不能なコードを回避できる、より良い解決策があるはずだと思います。

解決策/提案は大歓迎です、ありがとう。

編集:

コードを実行するときは、実際には問題になりません。しかし、テストでは、コードに到達できないため、いくつかの「リソースを使用した try-catch」とともに、品質分析ツール (sonar、pmd) はコードを「単体テストによる不十分な分岐カバレッジ」と見なし、これは主要な問題です。レポートを分析するため、このコードは避けたいと思います。

MessageDigest.getInstance(digestAlgo);別の質問ですが、コンストラクターでテストするのは良い習慣ですか? それともinsert(File)NoSuchAlgorithmException?

4

2 に答える 2