使用 JUnit 進行單元測試 - 教程

tanyuanji@126.com

版本歷史java

JUnit 程序員

該教程主要講解 JUnit 4.x 版本的使用,以及如何在Eclipse IDE 中如何使用JUnit 數據庫

 

目錄 編程

tanyuanji@126.com    1 數組

1. Junit    3 框架

1.1. 簡介    3 eclipse

2. JUnit     3 工具

2.1. 對於極限編程而言    3 單元測試

2.2. 對於重構而言    3 測試

2.3. 其餘狀況    3

3. 使用 JUnit    3

3.1. 使用JUnit 進行單元測試    3

3.2. 可使用的 JUnit 註解列表    4

3.3. 斷言(Assert)語句    5

3.4. 建立測試套件    6

3.5. 在 Eclipse 以外執行JUnit    7

4. 安裝JUnit    8

4.1. Eclipse集成JUnit    8

4.2. 下載Junit    8

5. EclipseJUnit的支持    8

5.1. 建立 JUnit 測試    8

5.2. 運行 JUnit 測試    8

5.3. JUnit靜態導入的設置    10

5.4. 建立JUnit 測試套件嚮導    12

5.5. 異常的測試    14

 

 

 

1. Junit介紹

1.1. 簡介

JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個迴歸測試框架(regression testing framework)。Junit測試是程序員測試,即所謂白盒測試,由於程序員知道被測試的軟件如何(How)完成功能和完成什麼樣(What)的功能。Junit是一套框架,繼承TestCase類,就能夠用Junit進行自動測試了。

JUnit是一個Java語言的單元測試框架。它由Kent Beck和Erich Gamma創建,逐漸成爲源於Kent Beck的sUnit的xUnit家族中爲最成功的一個。 JUnit有它本身的JUnit擴展生態圈。

 

多數Java的開發環境都已經集成了JUnit做爲單元測試的工具。

2. JUnit 優勢

2.1. 對於極限編程而言

要求在編寫代碼以前先寫測試,這樣能夠強制你在寫代碼以前好好的思考代碼(方法)的功能和邏輯,不然編寫的代碼很不穩定,那麼你須要同時維護測試代碼和實際代碼,這個工做量就會大大增長。所以在極限編程中,基本過程是這樣的:構思-> 編寫測試代碼-> 編寫代碼-> 測試,並且編寫測試和編寫代碼都是增量式的,寫一點測一點,在編寫之後的代碼中若是發現問題能夠較快的追蹤到問題的緣由,減少迴歸錯誤的糾錯難度。

2.2. 對於重構而言

其好處和極限編程中是相似的,由於重構也是要求改一點測一點,減小回歸錯誤形成的時間消耗。

2.3. 其餘狀況

咱們在開發的時候使用junit寫一些適當的測試也是有必要的,由於通常咱們也是須要編寫測試的代碼的,可能原來不是使用的junit,若是使用junit,並且針對接口(方法)編寫測試代碼會減小之後的維護工做,例如之後對方法內部的修改(這個就是至關於重構的工做了)。另外就是由於junit有斷言功能,若是測試結果不經過會告訴咱們哪一個測試不經過,爲何,而若是是像之前的通常作法是寫一些測試代碼看其輸出結果,而後再由本身來判斷結果使用正確,使用junit的好處就是這個結果是否正確的判斷是它來完成的,咱們只須要看看它告訴咱們結果是否正確就能夠了,在通常狀況下會大大提升效率。

3. 使用 JUnit

3.1. 使用JUnit 進行單元測試

JUnit 4.x 引用了註解的方式來對方法進行測試。一般測試方法都是被包含在一個 測試類

使用下面的代碼來建立一個單元測試 . 經過以下操做: FileNewJUnitJUnit Test case.

    @Test

    public void testMultiply() {

        MyClass tester = new MyClass();

        

        assertEquals( "10 x 5 must be 50 " , 50, tester.multiply( 10, 5 ) );

    }

JUnit 假設可使用任意的順序執行測試方法。於是測試不依賴於其餘的測試方法。

可使用註解 @org.junit.Test 來修飾方法,以建立一個測試方法。而後使用預期的值 與 真實的值來檢查方法是否正確。

你可使用 Eclipse IDE方式來運行一個測試類,經過以下操做:右鍵點擊須要測試的類而且選擇 Run Run AsJUnit Test

也可使用類 org.junit.runner.JUnitCore運行測試類,而不依賴於Eclipse。

該方法能夠標記須要測試的類,選擇要執行的測試。只有被選定的測試將會執行。

3.2. 可使用的 JUnit 註解列表

下表給出了JUnit 4.x可使用的註解的一個概述.

 

 1. JUnit4註解

註解

描述

@Test

public void method()

@Test 註解表明方法是一個測試方法。

@Test (expected = Exception.class)

表示預期會拋出Exception.class 的異常

@Test(timeout=100)

表示預期方法執行不會超過 100 毫秒.

@Before
public void method()

表示該方法在每個測試方法以前運行,可使用該方法進行初始化之類的操做

@After
public void method()

表示該方法在每個測試方法以後運行,可使用該方法進行釋放資源,回收內存之類的操做

@BeforeClass
public static void method()

表示該方法只執行一次,而且在全部方法以前執行。通常可使用該方法進行數據庫鏈接操做,注意該註解運用在靜態方法。

@AfterClass
public static void method()

表示該方法只執行一次,而且在全部方法以後執行。通常可使用該方法進行數據庫鏈接關閉操做,注意該註解運用在靜態方法。

@Ignore

表示該方法忽略。通常在低層代碼有所改動,可是未實現,能夠暫時忽略掉。也能夠忽略掉執行時間過長的測試。

 

3.3. 斷言(Assert)語句

JUnit在類 Assert提供了一些靜態的方法來測試某些條件。這些方法通常以 assert開頭,容許你指定消息( message ),預期的值 ( expected ),真實的值 ( actual )。一個斷言方法比較返回的真實值和預期值,若是比較失敗則會拋出 AssertionException 異常

 

下表給出了JUnit 4.x可使用的斷言方法的一個概述. 參數中的[]表示可選。

 2. 斷言方法

語句

描述

fail(String)

表示讓測試方法失敗。通常用於某些代碼執行不到,或者在fail代碼以前就失敗了。參數是可選的。

assertTrue([message], boolean condition)

表示給出的條件斷言爲真。.

assertFalse([message], boolean condition)

表示給出的條件斷言爲假。.

assertEquals([String message], expected, actual)

表示測試兩個值的內容相等。注意數組是檢查引用相同而不是數組的內容。

assertEquals([String message], expected, actual, tolerance)

測試float或double值匹配。容差是小數點後的位數,必須是相同的。assertEquals( 1.1f, 1.1111d, 1);

assertNull([message], object)

表示檢查的對象爲空。

assertNotNull([message], object)

表示檢查的對象爲非空。

assertSame([String], expected, actual)

表示兩個變量指向同一個引用。

assertNotSame([String], expected, actual)

表示兩個變量指向非同一個引用。

 

3.4. 建立測試套件

若是你須有多個測試單元,能夠合併成一個測試套件進行測試。而且能夠按照指定的順序執行全部的測試類。

下面的代碼示例建立了一個測試套件來執行兩個測試單元。若是你要添加其餘的測試單元可使用語句 @Suite.SuiteClasses 進行註解。

    package cn.nsccsz;

 

    import org.junit.runner.RunWith;

    import org.junit.runners.Suite;

    import org.junit.runners.Suite.SuiteClasses;

 

    @RunWith( Suite.class )

    @SuiteClasses( { JUnit1Test.class, StringUtilTest.class } )

    public class JSuit {

    }

3.5. 在 Eclipse 以外執行JUnit

JUnit 提供了使用標準的Java代碼形式執行測試,而不依賴於Eclipse。一般使用類

org.junit.runner.JUnitCore 類提供的靜態的方法runClasses()。

下面的代碼例子展現瞭如何使用 JUnitCode 來測試。

public class MyTestRunner {

 

    public static void main(String[] args) {

        Result result = JUnitCore.runClasses(JUnit1Test.class,

                StringUtilTest.class);

 

        for (Failure failure : result.getFailures()) {

            System.out.println(failure.toString());

        }

        

        System.out.println( "執行方法個數:" + result.getRunCount() );

        System.out.println( "執行時間:" + result.getRunTime() );

    }

 

}

可使用Ant腳本的方式或者Java命令方式,例如:

java -cp .;D:\Users\Administrator\.m2\repository\junit\junit\4.8.2\junit-4.8.2.jar cn.nsccsz.MyTestRunner

4. 安裝JUnit

4.1. Eclipse集成JUnit

Eclipse容許你使用不一樣版本Junit進行集成。通常Eclipse已經默認集成了JUnit3.x和JUnit4.x 不一樣的版本

4.2. 下載Junit

能夠從下面的官網下載 JUnit4.x.jar. 下載好的 junit-4.*.jar 添加到classpath.

http://junit.org/  

5. EclipseJUnit的支持

5.1. 建立 JUnit 測試

  • 爲當前的類建立測試類

右鍵單擊選中的類,在Package Explorer視圖中右鍵選中 NewJUnit Test Case.

  • 還可使用 JUnit 想到進行建立,使用下面的方法

FileNew Other...JavaJUnit.

5.2. 運行 JUnit 測試

要運行測試類,選中包含測試方法的類。右鍵點擊 Run-asJUnit Test,將會執行全部的測試方法。

Eclipse 提供了快捷鍵運行測試類,快捷鍵爲 Alt+Shift+X, ,T。若是你光標選中了某個方法,則會只運行選中的方法。

To see the result of an JUnit test, Eclipse uses the JUnit view which shows the results of the tests. You can also select individual unit test in this view , right-click them and select Run to execute them again.

Eclipse提供了JUnit view視圖來顯示測試運行的結果。在這個視圖中你能夠選中個別的測試類,右鍵選中來Run運行它們。

 

默認的狀況下該視圖顯示全部的測試信息。你能夠經過以下配置設置只顯示失敗的測試。

 

5.3. JUnit靜態導入的設置

Eclipse 支持JUnit 的靜態導入功能,使用 Ctrl+1 或者 Content Assist功能快捷鍵 。查看下圖。

Content Assist 靜態導入的配置。

  • WindowPreferences
  • JavaEditorContent AssistFavorites

5.4. 建立JUnit 測試套件嚮導

To create a test suite in Eclipse you select the test classes which should be included into this in the Package Explorer view, right-click on them and select New Other...JUnitJUnit Test Suite.

在Eclipse中建立測試套件的方法

右鍵選中須要建立套件的包,選中 New Other...JUnitJUnit Test Suite.

5.5. 異常的測試

註解 @Test (expected = Exception.class) 限制了只能測試一個異常。可使用下面的代碼測試更多異常。

    @Test

    public void testExceptions() {

        try {

            StringUtil.mustThrowException();

            fail();

        } catch( Exception e ) {

            // expected.

        }

        

        try {

            StringUtil.mustThrowException();

            fail();

        } catch( Exception e ) {

            // expected.

        }

    }

相關文章
相關標籤/搜索