TestResult
TestResult 有兩個 List,用來記錄 Exception 和 Failure。捕獲 runBare() 拋出的 Exception,首先判斷是否為 AssertionFailedError,是則調用 addFailure() 把,把異常加到 fFailures。否則則并調用 addError() 方法,把異常加到 fErrors 中。
catch (AssertionFailedError e) {
addFailure(test, e);
}
catch (ThreadDeath e) { // don't catch ThreadDeath by accident
throw e;
}
catch (Throwable e) {
ddError(test, e);
}
TestListener
前面提到 result 加上了一個 ResultPrinter,ResultPrinter 會記錄運行中的所有 Exception,并且實時地以不同的格式輸出。當所有的 Test 都運行完畢后,ResultPrinter 會對 result 進行分析,首先輸出運行的時間,接著 printError() 輸出 fErrors 的個數,printFailures() 則輸出 fFailures 的個數。PrintFooter() 根據 result.wasSuccessful(),如果成功,則打印 OK 和 test 運行的總次數,如果失敗,則打印出 test 總的運行的個數,失敗和錯誤的個數。
參數一的統計輸出結果:
Time: 0.016
There was 1 failure:
1) testPay(TestShoppingCart)junit.framework.AssertionFailedError:
expected:<30> but FAILURES!!!
Tests run: 2, Failures: 1, Errors: 0
清單一:
Java代碼
synchronized void print(TestResult result, long runTime) {
printHeader(runTime);
printErrors(result);
printFailures(result);
printFooter(result);
}
清單二:
Java代碼
protected void printFooter(TestResult result) {
if (result.wasSuccessful()) {
getWriter().println();
getWriter().print("OK");
getWriter().println (" (" + result.runCount() + " test"
+ (result.runCount() == 1 ? "": "s") + ")");
} else {
getWriter().println();
getWriter().println("FAILURES!!!");
getWriter().println("Tests run: "+result.runCount()+
", Failures: "+result.failureCount()+
", Errors: "+result.errorCount());
}
getWriter().println();
}
完整生命周期
整個生命周期將在下圖顯示: