4 回答

TA貢獻(xiàn)1853條經(jīng)驗 獲得超18個贊
您不能期望您的斷言框架能夠捕獲在您的 SUT 中捕獲的異常:
catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }
你要么必須:
記錄然后重新拋出相同/不同的異常并斷言。
使您的方法返回布爾值作為成功等價物,然后您可以對其進(jìn)行斷言。

TA貢獻(xiàn)1875條經(jīng)驗 獲得超5個贊
你抓住了FileNotFoundException
內(nèi)部readData
。
嘗試重構(gòu),這樣你就沒有 try-catch,并且有public void readData(String COMMA_DELIMITER, String READ_FILE_PATH) throws IOException { ...
(FileNotFoundException
是的子類IOException
。)

TA貢獻(xiàn)1816條經(jīng)驗 獲得超4個贊
assertThrows(Class<T> expectedType, Executable executable)
不會斷言在您的代碼中一次拋出異常(在您的情況下是這樣)。但這斷言在 lambda 中調(diào)用的語句Executable
拋出異常(在您的情況下為 false)。
FileNotFoundException
由于您在被測方法中 捕獲了異常,異常永遠(yuǎn)不會傳播到 lambda 返回,JUnit 只能發(fā)出錯誤,因為沒有遇到預(yù)期的異常。
要斷言這樣的事情,不要通過刪除語句來捕獲異常catch
,而不是throws
FileNotFoundException
在測試方法的聲明中聲明:
public void readData(String COMMA_DELIMITER, String READ_FILE_PATH) throw FileNotFoundException {...}

TA貢獻(xiàn)1848條經(jīng)驗 獲得超6個贊
您的方法不會拋出FileNotFoundException:您捕獲它,打印堆棧跟蹤,然后繼續(xù)進(jìn)行,就好像沒有發(fā)生異常一樣:
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JUnit 并不神奇:它無法檢測方法內(nèi)部發(fā)生的事情,除了檢測副作用(返回的值、未捕獲的異常、變異狀態(tài))。
添加回答
舉報