第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Junit 沒有捕捉到 FileNotFoundException

Junit 沒有捕捉到 FileNotFoundException

富國滬深 2023-06-04 17:47:10
我遇到了一些奇怪的事情。我有一種方法可以逐行讀取 CSV 文件。該方法采用文件路徑,在我的 JUnit 測試中,我使用錯誤的文件路徑測試此方法,期望得到 FileNotFoundException。問題是 JUnit5 不會拋出該異常,但在 eclipse 控制臺中我可以看到 JVM 拋出該異常,所以我很難理解為什么我已經(jīng)設(shè)置了我的測試代碼來拋出異常,但它沒有被拋出。我試圖捕捉異常但仍然沒有快樂。這是方法和測試方法public void readData(String COMMA_DELIMITER, String READ_FILE_PATH) {    BufferedReader br = null;    try {        br = new BufferedReader(new FileReader(READ_FILE_PATH));        String line = "";        //Read to skip the header        br.readLine();        //Reading from the second line        while ((line = br.readLine()) != null)         {            String[] employeeDetails = line.split(COMMA_DELIMITER);            populateModel(employeeDetails);        }        //Lets print the Employee List        for(Employee e : empList)        {            System.out.println(e.getName() + "; " + e.getSurname() + "; " + e.getDateOfBirth() + "; " + e.getSex());        }    }     catch (FileNotFoundException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    catch (IOException e) {        e.printStackTrace();    }}@Test    void testWrongFilePath() {        String READ_FILE_PATH_WRONG = System.getProperty("user.dir") + "/teest/XXXFile.csv";        System.out.println(READ_FILE_PATH_WRONG);        Assertions.assertThrows(FileNotFoundException.class, () -> {            readData.readData(COMMA_DELIMITER, READ_FILE_PATH_WRONG);        });         }在控制臺中,我得到了 FIleNotFoundException,但測試的輸出表明org.opentest4j.AssertionFailedError: Expected java.io.FileNotFoundException to be thrown, but nothing was thrown.
查看完整描述

4 回答

?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗 獲得超18個贊

您不能期望您的斷言框架能夠捕獲在您的 SUT 中捕獲的異常:

catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

你要么必須:

  • 記錄然后重新拋出相同/不同的異常并斷言。

  • 使您的方法返回布爾值作為成功等價物,然后您可以對其進(jìn)行斷言。


查看完整回答
反對 回復(fù) 2023-06-04
?
慕田峪4524236

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。)


查看完整回答
反對 回復(fù) 2023-06-04
?
繁華開滿天機

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 {...}



查看完整回答
反對 回復(fù) 2023-06-04
?
慕勒3428872

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))。


查看完整回答
反對 回復(fù) 2023-06-04
  • 4 回答
  • 0 關(guān)注
  • 261 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號