我正在嘗試爲類ErParser中的方法setTrailer()
編寫測試用例。 setTrailer()
有try-catch子句,並且在其中一個catch子句中,它捕獲NullPointerException
。我試圖爲setTrailer()
引發並捕獲NullPointerException
的情況編寫Junit測試,但測試用例仍然失敗。是否因爲我已經在方法本身中發現了異常?我應該在測試用例中捕捉異常嗎?Junit已經有try-catch子句的方法的測試用例
測試案例:ERParser類內
public class TestERParser {
@Test(expected=NullPointerException.class)
public void nullSetTrailer() {
ERParser recCurrParse = new ERParser();
recCurrParse.setTrailer(null);
}
}
setTrailer()方法:
public class ERParser {
private static final String TRAILER_E = "GRAND TOTAL";
private static final String TRAILER_R = "TRAILER";
public String trailerRecord;
/**
* Constructs an ERParser object.
*/
public ERParser() {
this.trailerRecord = null;
this.trailerVals = null;
}
/**
* Populates the trailerRecord field with the summary (trailer) record of the input file.
* @param file Input file
* @throws NullPointerException, FileNotFoundException, IOException
*/
public void setTrailer(File file) {
try {
FileReader fReader = new FileReader(file);
BufferedReader bReader = new BufferedReader (fReader);
String currLine = new String();
readLoop:
while (bReader.ready()) {
currLine = bReader.readLine();
if (currLine.contains(TRAILER_E) || currLine.contains(TRAILER_R)) {
break readLoop;
}
}
this.trailerRecord = currLine.trim();
System.out.println("From setTrailer(): " + this.trailerRecord);
fReader.close();
bReader.close();
} catch (NullPointerException exception) {
exception.printStackTrace();
} catch (FileNotFoundException exception) {
exception.printStackTrace();
} catch (IOException exception) {
exception.printStackTrace();
}
}
}
您不應該捕獲NPE;你應該完全避免它。檢查空值並且沒有NPE異常。 –
通常情況下,調用者會拋出並捕獲異常,這是執行異常的最佳方式,異常可能是指外部的某種情況;想象除0操作被處理,而不是得到錯誤,它返回0或1,或任何其他值,但你想期待這種特殊情況。有了Junit,你無法在那裏做任何事情,但期待對該方法的調用。如果你拋出任何異常,那麼你可以期待異常。 – porfiriopartida
我不認爲你完全理解如何從IOException中恢復,只是說。 – Woot4Moo