如果在 try / catch 塊中捕獲了適當的例外,是否可以 @Test 在主代碼函式中拋出適當的例外?
前任:
public int maxSum(int a, int b) {
try {
if (a b > 100)
throw new TooMuchException("Too much! Sum reduced to 50");
} catch (TooMuchException e) {
System.out.println(e);
return 50;
}
return a b;
}
被這樣的人測驗
@Test
void maxSum_TooMuchExceptionThrowedAndCatchedWhenSumOfNumbersIsOver100() {
Service service = new Service();
assertThatThrownBy(() -> {
service.maxSum(55, 66);
}).isInstanceOf(TooMuchException.class)
.hasMessageContaining("Too much! Sum reduced to 50");
}
.
public class TooMuchException extends Throwable {
public TooMuchException(String message) {
super(message);
}
}
測驗例外不是訊息。
我關心這一點是因為我希望能夠在不使程式崩潰的情況下捕獲函式中的例外。
uj5u.com熱心網友回復:
測驗的作業是確認代碼的行為是否符合預期,這意味著:代碼做了它需要做的事情。測驗不應驗證實作細節。
拋出和捕獲的例外是一個實作細節,因為外部程式不知道或不關心它。在這種情況下,查看此代碼并得出結論認為在此處拋出例外是無用的(或性能不佳,因為創建堆疊跟蹤需要成本)是非常合理的,并且應該將其洗掉。但是,如果您在測驗中添加代碼以以某種方式檢查例外,例如通過讀取寫入 stdout 的堆疊跟蹤(如果您知道 io 類,則非常可行,只是繁瑣而脆弱),那么您將浪費時間實作該檢查,您還將為更改實施的任務做額外的作業。有人必須查看它,理解它,并檢查它是否可以安全移除。
這就是我們試圖避免測驗實作細節的原因,我們總是有可能遇到需要修改我們的實作的缺陷或性能問題或設計更改。更新測驗是一項作業,我們希望在維護測驗時盡量減少作業量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/406779.html
標籤:
