[英]Junit5 verify if an exception was thrown during the execution
在 JUnit5 中,我如何驗證是否曾經拋出異常但后來在執行期間被捕獲? 例如,考慮
public Optional<Foo> MethodA(Argument a) {
try {
/*
Some logic based on Aargument a providing biproduct Argument b
*/
methodB(b)
/*
some other logic capable of throwing exception
*/
} catch(Exception e) {
// log exception
return Optional.empty();
}
}
private BReturnValue MethodB(Argument b) throws Exception{
throw new IllegalStateException()
}
現在無論哪種方法,無論是 A 還是 B 拋出異常,作為 MethodA 的返回值,我都會收到一個空的 Optional,因此我不能使用 assertThrows() 但我實際上正在測試一個會導致 MethodB 拋出異常的測試用例。 我可以,如果可以,我如何驗證在執行期間是否從MethodB
引發了異常?
筆記
biproduct argument
和使用assertThrows()
。 但我正在尋找一些更好的方法來驗證 biproduct biproduct argument
是由 MethodA 形成的,而 methodB 引發了異常。 而且我不想直接測試MethodB
,而是通過MethodA
。
JUnit 無法檢測拋出並捕獲的異常。 這將需要分析執行情況,雖然在某種程度上它在技術上可能是可行的,但實施如此復雜的機制會適得其反。
在這種情況下,我想知道為什么對拋出異常的測試很重要? 在任何情況下,只要您的測試將Optional.empty()
返回值視為失敗的測試,測試就會失敗,盡管它可能根本不應該捕獲異常。 在這種情況下,如果測試失敗,您必須做額外的工作來確定出了什么問題,但您仍然得到了重要信息:出了問題。
如果您覺得知道異常發生在哪里很重要,那么很可能應該單獨測試這些方法,這需要重新設計/重構代碼以更容易測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.