• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    JUnit實施--5.JUnit簡介

    發布: 2007-7-01 18:47 | 作者: admin | 來源: | 查看: 12次 | 進入軟件測試論壇討論

    領測軟件測試網 5.JUnit簡介

    既然我們已經對JUnit有了一個大致的了解,我希望能給大家提供一個稍微正式一些的編寫JUnit測試文檔的手冊,明白其中的一些關鍵術語和概念。但我要聲明的是這并不是一本完全的手冊,只能認為是一本入門手冊。同其他OpenSource的軟件有同樣的問題,JUnit的文檔并沒有商業軟件文檔的那種有規則,簡潔和完全。由開發人員編寫的文檔總是說不太清楚問題,全整的文檔需要參考"官方"指南,API手冊,郵件討論組的郵件,甚至包括源代碼中及相關的注釋。

    事實上問題并沒有那么復雜,除非你有非常特別的要求,否則,只需參考本文你就可以得到所需的大部分信息。

    1. 安裝

      首先你要獲取JUnit的軟件包,從下載最新的軟件包(截至寫作本文時,JUnit的最新版本是3.7)。將其在適當的目錄下解包。這樣在安裝目錄(也就是你所選擇的解包的目錄)下你找到一個名為junit.jar的文件。將這個jar文件加入你的CLASSPATH系統變量。(IDE的設置會有所不同,參看你所喜愛的)JUnit就安裝完了。太easy了!

      你一旦安裝完JUnit,就有可能想試試我們的Car和testCar類,沒問題,我已經運行過了,你得到的結果應該和我列出的結果類似。(以防新版JUnit使我的文章過時)

      接下來,你可能會先寫測試代碼,再寫工作代碼,或者相反,先寫工作代碼,再寫測試代碼。我更贊成使用前一種方法:先寫測試代碼,再寫工作代碼。因為這樣可以使我們編寫工作代碼時清晰地了解工作類的行為。

      要注意編寫一定能通過的測試代碼(如文中的例子)并沒有任何意義,只有測試代碼能幫助我們發現bug,測試代碼才有其價值。此外測試代碼還應該對工作代碼進行全面的測試。如給方法調用的參數傳入空值、錯誤值和正確的值,看看方法的行為是否如你所期望的那樣。

      你現在已經知道了編寫測試類的基本步驟:
      1>擴展TestCase類;
      2>覆蓋runTest()方法(可選);
      3>寫一些testXXXXX()方法;

    2. Fixture

      解下來的問題是,如果你要對一個或若干個的類執行多個測試,該怎么辦?JUnit對此有特殊的解決辦法。

      如果需要在一個或若干個的類執行多個測試,這些類就成為了測試的context。在JUnit中被稱為Fixture(如testCar類中的 myCar 和 expectedWheels )。當你編寫測試代碼時,你會發現你花費了很多時間配置/初始化相關測試的Fixture。將配置Fixture的代碼放入測試類的構造方法中并不可取,因為我們要求執行多個測試,我并不希望某個測試的結果意外地(如果這是你要求的,那就另當別論了)影響其他測試的結果。通常若干個測試會使用相同的Fixture,而每個測試又各有自己需要改變的地方。

      為此,JUnit提供了兩個方法,定義在TestCase類中。
              protected void setUp() throws java.lang.Exception        protected void tearDown() throws java.lang.Exception        覆蓋setUp()方法,初始化所有測試的Fixture(你甚至可以在setUp中建立網絡連接),將每個測試略有不同的地方在testXXX()方法中進行配置。

      覆蓋tearDown()(我總想起一首叫雨滴的吉他曲),釋放你在setUp()中分配的永久性資源,如數據庫連接。

      當JUnit執行測試時,它在執行每個testXXXXX()方法前都調用setUp(),而在執行每個testXXXXX()方法后都調用tearDown()方法,由此保證了測試不會相互影響。

    3. TestCase

      需要提醒一下,在junit.framework.Assert類中定義了相當多的assert方法,主要有assert(), assert(), assertEquals(), assertNull(), assertSame(), assertTrue(), fail()等方法。如果你需要比較自己定義的類,如Car。assert方法需要你覆蓋Object類的equals()方法,以比較兩個對象的不同。實踐表明:如果你覆蓋了Object類的equals()方法,最好也覆蓋Object類的hashCode()方法。再進一步,連帶Object類的toString()方法也一并覆蓋。這樣可以使測試結果更具可讀性。

      當你設置好了Fixture后,下一步是編寫所需的testXXX()方法。一定要保證testXXX()方法的public屬性,否則無法通過內。╮eflection)對該測試進行調用。

      每個擴展的TestCase類(也就是你編寫的測試類)會有多個testXXX()方法。一個testXXX()方法就是一個測試。要想運行這個測試,你必須定義如何運行該測試。如果你有多個testXXX()方法,你就要定義多次。JUnit支持兩種運行單個測試的方法:靜態的和動態的方法。

      靜態的方法就是覆蓋TestCase類的runTest()方法,一般是采用內部類的方式創建一個測試實例:         TestCase test01 = new testCar("test getWheels") {            public void runTest() {                testGetWheels();            }        }            采用靜態的方法要注意要給每個測試一個名字(這個名字可以任意起,但你肯定希望這個名字有某種意義),這樣你就可以區分那個測試失敗了。

      動態的方法是用內省來實現runTest()以創建一個測試實例。這要求測試的名字就是需要調用的測試方法的名字:         TestCase test01 = new testCar("testGetWheels");            JUnit會動態查找并調用指定的測試方法。動態的方法很簡潔,但如果你鍵入了錯誤的名字就會得到一個令人奇怪的NoSuchMethodException異常。動態的方法和靜態的方法都很好,你可以按照自己的喜好來選擇。(先別著急選擇,后面還有一種更酷的方法等著你呢。)

    4. TestSuite

      一旦你創建了一些測試實例,下一步就是要讓他們能一起運行。我們必須定義一個TestSuite。在JUnit中,這就要求你在TestCase類中定義一個靜態的suite()方法。suite()方法就像main()方法一樣,JUnit用它來執行測試。在suite()方法中,你將測試實例加到一個TestSuite對象中,并返回這個TestSuite對象。一個TestSuite對象可以運行一組測試。TestSuite和TestCase都實現了Test接口(interface),而Test接口定義了運行測試所需的方法。這就允許你用TestCase和TestSuite的組合創建一個TestSuite。這就是為什么我們前面說TestCase,TestSuite以及TestSuite組成了一個composite Pattern的原因。例子如下:         public static Test suite() {            TestSuite suite= new TestSuite();            suite.addTest(new testCar("testGetWheels"));            suite.addTest(new testCar("testGetSeats"));            return suite;        }            從JUnit 2.0開始,有一種更簡單的動態定義測試實例的方法。你只需將類傳遞給TestSuite,JUnit會根據測試方法名自動創建相應的測試實例。所以你的測試方法最好取名為testXXX()。例子如下:         public static Test suite() {            return new TestSuite(testCar.class);        }            從JUnit的設計我們可看出,JUnit不僅可用于單元測試,也可用于集成測試。關于如何用JUnit進行集成測試請參考。

      為了兼容性的考慮,下面列出使用靜態方法的例子:         public static Test suite() {            TestSuite suite= new TestSuite();            suite.addTest(                new testCar("getWheels") {                     protected void runTest() { testGetWheels(); }                }            );                suite.addTest(                new testCar("getSeats") {                     protected void runTest() { testGetSeats(); }                }            );            return suite;                    }            
    5. TestRunner

      有了TestSuite我們就可以運行這些測試了,JUnit提供了三種界面來運行測試         [Text  UI] junit.textui.TestRunner        [AWT   UI] junit.awtui.TestRunner        [Swing UI] junit.swingui.TestRunner            我們前面已經看過文本界面了,下面讓我們來看一看圖形界面:



      界面很簡單,鍵入類名-testCar;蛟趩覷I的時候鍵入類名:         [Windows] d:>java junit.swingui.TestRunner testCar            [Unix] % java junit.swingui.TestRunner testCar        從圖形UI可以更好的運行測試可查單測試結果。還有一個問題需要注意:如果JUnit報告了測試沒有成功,JUnit會區分失。╢ailures)和錯誤(errors)。失敗是一個期望的被assert方法檢查到的結果。而錯誤則是意外的問題引起的,如ArrayIndexOutOfBoundsException。

      由于TestRunner十分簡單,界面也比較直觀,故不多介紹。朋友們可自行參考相關資料。

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>