<2008年3月>
          2425262728291
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          隨筆分類

          隨筆檔案

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

          Junit4 快速入門

          Junit 概念,原理這里就不說了,有興趣的朋友可以查閱相關(guān)資料,這篇文章主要是為了快速給大家介紹一下junit4的使用 以及與 junit3的區(qū)別,這里默認(rèn)大家對junit3已經(jīng)有些理解了。下面就開始吧:

          1.先寫個簡單的被測試類:

          package test.junit;

          public class BaseClass {

          public String method() {

          return this.getClass().getName();

          }

          }

          2.對于這個類的unit測試,我們先看看在junit3中怎么進(jìn)行測試的吧:

          package test.junit;

          import junit.framework.TestCase;//引入TestCase

          public class BaseClassTest extends TestCase {//類必須繼承TestCase

          BaseClass baseClass;

          protected void setUp() throws Exception {

          super.setUp();

          baseClass = new BaseClass();

          }

          public void testMethod (){//測試方法必須以test開頭

          //通過assert*來檢驗

          assertTrue(baseClass.method ().equals("test.junit.BaseClass"));

          }

          }

          通過上面這個類,我們對junit3進(jìn)行一些總結(jié):

          1. 必須引入類TestCaseimport junit.framework.TestCase;),

          2. 必須繼承類TestCase (class BaseClassTest extends TestCase)

          3. 測試方法必須以test開頭(public void testMethod ()

          4. 通過assert*方法來判斷結(jié)果(assertTrue(baseClass.method ().equals("test.junit.BaseClass"));)。

          3. 下面來了解一下junit4里面的內(nèi)部關(guān)系吧,下面來看看我們今天的主角junit4是怎么處理這些的吧:

          package test.junit;

          import org.junit.Test;//引入Test

          import static org.junit.Assert.*;//引入Assert.*

          public class BaseClassTestNew {//這里不用再繼承TestCase類了。

          BaseClass baseClass = new BaseClass();

          @Test public void methodOne(){//名字可以按你自己的愛好。但是必須以@Test開頭

          //還是以assert*來判斷

          assertTrue(baseClass.methodOne().equals("test.junit.BaseClass"));

          }

          }

          看看多么的簡潔,好像少了很多約束,下面通過和junit3的特性進(jìn)行比較總結(jié)junit4的特性:

          1.必須引入類TestCaseimport junit.framework.TestCase;

          è必須引入類Testimport org.junit.Test;,必須引入類(import static org.junit.Assert.*;

          2.必須繼承類TestCase (class BaseClassTest extends TestCase)

          è不需要

          3.測試方法必須以test開頭(public void testMethod ()

          è不需要,但是類開始的時候要標(biāo)記 @Test

          4.通過assert*方法來判斷結(jié)果(assertTrue(baseClass.method ).equals("test.junit.BaseClass"));)。

          從上面的對比,可以看出junit4junit3的區(qū)別在于:

          去掉與類TestCase的偶聯(lián)性,唯一觸發(fā)TestCase的地方就是在@Test上。

          4.以上就是junit4junit3的區(qū)別與改進(jìn),下面再繼續(xù)看看junit4有哪些新增加的功能吧:

          1. @Before @After

          類似于init() destory(),可以將一些初始化和釋放工作放到這里面,每個類都只有一個@Before @After。為了實(shí)現(xiàn)這個功能,我們將測試類修改如下:

          import org.junit.Test;

          //新增加兩個類

          import org.junit.Before;

          import org.junit.After;

          import static org.junit.Assert.*;

          public class BaseClassTestNew {

          BaseClass baseClass ; //這里不用進(jìn)行初始化

          @Before public void runBeforeTest(){

          baseClass = new BaseClass();

          }

          @Test public void method (){

          assertTrue(baseClass.method ().equals("test.junit.BaseClass"));

          }

          @After public void runAfterTest(){

          baseClass.teardownList();

          baseClass = null;

          }

          }

          @Before 方法會在 @Test 之前進(jìn)行,相反 @After 會在所有方法運(yùn)行完進(jìn)行。

          Junit4同時還支持 @BeforeClass @AfterClass,原理一樣,大家可以參考相關(guān)資料。

          2.TimeOut 屬性

          Junit4支持timeout,運(yùn)用如下:

          a. 首先在被測試類中增加用于測試timeout的方法:

          public void methodTimeOut() {

          try {

          Thread.sleep(50);//50

          System.out.println("methodTimeOut");

          } catch (InterruptedException e) {

          }

          }

          b.看看怎么測試這個方法:

          @Test(timeout=5)

          public void methodTimeOut(){

          baseClass.methodTimeOut();

          }

          1. 增加(timeout=5)這個設(shè)置項

          2. 運(yùn)行完 沒有輸出methodTimeOut,說明這個方法沒有執(zhí)行完,達(dá)到效果。

           

          junit中的assert方法全部放在Assert類中,總結(jié)一下junit類中assert方法的分類。

          1.assertTrue/False([String message,]boolean condition);

              判斷一個條件是true還是false。感覺這個最好用了,不用記下來那么多的方法名。

          2.fail([String message,]);

              失敗,可以有消息,也可以沒有消息。

          3.assertEquals([String message,]Object expected,Object actual);

              判斷是否相等,可以指定輸出錯誤信息。

              第一個參數(shù)是期望值,第二個參數(shù)是實(shí)際的值。

              這個方法對各個變量有多種實(shí)現(xiàn)。在JDK1.5中基本一樣。

              但是需要主意的是floatdouble最后面多一個delta的值,可能是誤差范圍,不確定這個

          4.assertNotNull/Null([String message,]Object obj);

              判讀一個對象是否非空(非空)

          5.assertSame/NotSame([String message,]Object expected,Object actual);

              判斷兩個對象是否指向同一個對象。看內(nèi)存地址。

          7.failNotSame/failNotEquals(String message, Object expected, Object actual)

              當(dāng)不指向同一個內(nèi)存地址或者不相等的時候,輸出錯誤信息。

              注意信息是必須的,而且這個輸出是格式化過的。

           

           



           

          posted on 2008-03-24 16:12 java flex 結(jié)合 閱讀(543) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 凤城市| 手机| 普陀区| 牡丹江市| 淅川县| 宁波市| 山阳县| 鹰潭市| 宕昌县| 福贡县| 敖汉旗| 灵川县| 新绛县| 汨罗市| 怀来县| 句容市| 津市市| 德令哈市| 旅游| 吉林市| 唐海县| 乌拉特前旗| 敦煌市| 观塘区| 永昌县| 元江| 宁强县| 宁远县| 新河县| 湾仔区| 巴东县| 铅山县| 大埔区| 天门市| 灵丘县| 成武县| 达日县| 平南县| 甘泉县| 呼图壁县| 景德镇市|