這兩天花了點時間把junit的原始碼看了看,把看後的想法總結在這裡,說實在的junit的內容真很少,但是確有這麼大的影響裡,呵呵,只能說它
做的對了。
因為我比較懶,而且對swing的東西不是太熟悉,所以我只看了junit.framework.*,junit.runner.*,junit.extensions.*,junit.textui.*,我想
這樣也就差不多了。
我先大體的說說,首先你生成乙個runner,這個runner呼叫run方法,run的引數是個suite物件,run方法最終會呼叫suite的run方法,run方法會將呼叫
資訊寫到testresult中(colleting parameter),最後使用testlistener將testresult中的資訊列印出來,覺得過程還是很簡單的。
然後說說乙個重要的部分就是test,testcase,testsuite的關係,首先testcase和testsuite都實現了test介面,這個介面中最重要的方法當然是
run,他們構成了composite模式 ,testcase是leaf,而testsuite就是composite,當你呼叫suite的run方法時他會迭代內部所有的test(放在乙個vector中)呼叫相應的run方法
,而如果這個test是乙個testcase型別的它就呼叫起相應名稱的乙個test**方法,而如果這個test是乙個testsuite物件將對呼叫testsuite的run方法
進而繼續迭代呼叫其內部的test,還有一點要說明的當你實現了乙個testcase物件,它只代表乙個test**方法,就是建構函式傳來的name引數對應的
方法,雖然你的所有測試方法都寫在乙個testcase的子類中,但是乙個物件只對應乙個test**方法.
接著我要說的就是assert,我們知道test**方法中就是一些asert**方法,可以說測試方法的單元就是這些斷言,看過原始碼後會覺得它的實現相當的簡單
就是測試是否滿足一定的條件,如果不滿足則丟擲assertionfailederror,不知道為什麼老大要用error也許是這樣寫程式方便,不用隨時捕獲它吧
如果丟擲異常則會封裝成testfailure存到testresult中(而且也要存到testlistener中).
junit.runner.*是測試用例執行時需要的環境,這裡包括最重要的basetestrunner,幾個自定義的classloader,幾個testcollector,乙個快速排序的助手類
還有一些無關緊要的東西。
junit.extensions.*中時一些對testsuite的擴充套件類它們為某些需求提供了快速實現。
junit的實現很簡單就是用了些反射,同步,還有一些物件導向的技巧,但是它提供了乙個runner,為測試**建立了乙個執行環境,這個倒是
個不錯的想法,好像sun對容器的使用是很常規的思想,總之要比在manin函式中粗糙的測試要好的多,但我覺得也沒有必要神話它吧,起碼我覺得
可以作出比他更好的東西,不過簡單也的確是它快速推廣的原因。
package lq.mytest.test;
import junit.framework.*;
public class kktest extends testcase
public kktest(string name);
public void setup();
public void teatdown();
public void testa();
public void testb();
public static testsuite suite();
});;
return suite;
}
public static void main(string args);
}
Junit的簡單例子
第一步 被測試類 helloworld 類 public class helloworld calculator 類 public class calculator public int minus int a,int b public int multiply int a,int b public...
Junit 學習總結(一)
還得從頭來,一步一步紮實的學啊。勿在浮沙駐高台。先是記錄性質,有空再整理吧 當說出這句話時意味著十有 是不會整理了 首先從引入包開始。使用junit 一般會使用這句 import org.junit.test 為什麼要引入這句呢?而不是import junit.framework.test 呢?or...
Junit工具的簡單使用
windows平台,工具為intellij 使用junit完成一次向 helloworld 那樣基礎的測試 導包 需要兩個類 需要測試的類和進行測試的類 import org.junit.test import static org.junit.assert.assertequals public ...