實際上/邏輯上不能達到的代碼,我有一個接口:避免在catch子句
public interface FileRepository {
String insert(File file) throws IOException;
// other methods ...
}
我的insert(File file)
實現使用當地(避免併發問題)java.security.MessageDigester
會拋出其工廠方法檢查異常java.security.NoSuchAlgorithmException
。
我的做法:作爲NoSuchAlgorithmException
永遠是一個致命的錯誤(這使得模塊完全不可用),我嘗試在我的構造函數測試的參數digestAlgo
初始化MessageDigest
,所以異常可以通過構造函數拋出,其他(早)比從insert(File)
。另一個原因是界面不允許按定義投擲NoSuchAlgorithmException
。
我的問題:在我的實現,代碼
} catch (NoSuchAlgorithmException e) {
LOGGER.fatal(MD_INIT_ERROR, e);
return null;
}
永遠不會達到,所以我覺得應該有更好的解決方案,它允許以避免(在邏輯上和實際上)可達代碼。
任何解決方案/建議將受到歡迎,謝謝。
編輯:
運行代碼時並不是真正的問題。但在測試中,由於代碼無法訪問,再加上一些「試圖捕獲資源」,質量分析工具(sonar,pmd)將考慮代碼「單元測試的分支覆蓋不足」,這是一個主要問題。分析報告,這就是爲什麼我想要避免這段代碼。
另一個問題,是在我的構造函數中測試MessageDigest.getInstance(digestAlgo);
的好習慣嗎?或者讓insert(File)
承擔NoSuchAlgorithmException
的全部責任?
...如果它被定義爲必須被捕獲,那一定是。如果它是致命的,則拋出一個運行時異常並將根源鎖定。我沒有看到問題。 –
@DaveNewton感謝評論。運行代碼時不是真正的問題。但是在測試中,由於代碼無法訪問,再加上一些帶有資源的「try-catch」,質量分析工具(sonar,pmd)會考慮代碼「單元測試的分支覆蓋率不足」,這是一個主要問題在分析報告中,這就是爲什麼我想要避免這段代碼。 – ren78min