Junit原理詳解三

我們以一個非常簡單的TestCalculator類爲例,只有一個測試方法:

Public class TestCalculator extends TestCase

{

      Public void testAdd()

      {

             Calculator calculator = new Calculator();

             Double result = calculator.add(10, 50);

             assertEquals(60, result);

      }

}

當我們使用Run in Junit 的時候,之前說到過的幾個核心類之間是怎麼運行的呢?我們先看下基本過程:

TestRunner啓動界面框 —》創建一個TestSuite––》創建一個TestResult—》執行testadd方法。

由於我們的TestCalculator測試類裏面沒有顯式的suite方法,大部分情況下都是類似,這樣的話,TestRunner創建了一個默認的TestSuite對象,看下圖:

Junit內部解密之三: <wbr>單元測試用例運行的全過程



那麼同時TestRunner還需要創建包含測試結果(成功,失敗或出錯)的TestResult對象,具體過程如下:

Junit內部解密之三: <wbr>單元測試用例運行的全過程

1.最開始的時候,TestRunner實例化了一個TestResult對象,在測試順序執行的時候,這個對象將用於保存測試結果。

2.TestRunner向TestResult註冊,就是add一個監聽器,這樣的話在執行測試過程中,TestRunner就可以收到各種事件,TestResult會廣播如下方法:測試開始(startTest);測試失敗(addFailure); 遇到測試錯誤(addError); 測試結束(endTest)

3.知道了這些事件後,TestRunner就可以隨着測試的進行而顯示進度條了,並且在失敗或錯誤的時候顯示出來。

4.TestRunner通過調用TestSuite的run(TestResult)方法來開始測試

5.TestSuite爲它所擁有的每個Test Case實例調用run(TestResult)方法。

6.TestCase使用傳遞給它的TestResult實例來調用其run(Test)方法,並把自身作爲參數傳遞給run方法,這樣TestResult立馬就可以用runBare()來回調它。

接着就是執行測試方法了:

這裏需要說明的是對於每個TestCase都會調用runBare()方法,這裏只有一個testAdd方法,所以只調用一次,請看下圖:

Junit內部解密之三: <wbr>單元測試用例運行的全過程

1.runBare()方法將調用setUp, testAdd, teardown 方法,順序執行。

2.如果調用3個方法的過程出現任何失敗或錯誤,那麼TestResult就會分別調用addFailure和addError來通知它的所有Listener。

3.這樣TestRunner就會收到這些錯誤或失敗,也會羅列出這些錯誤,否則進度條就是綠色的,讓你知道測試方法沒有問題。

4.當tearDown方法執行完後,測試也就完成了,TestResult會通過調用endTest把這個結果通告給所有的Listener。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章