天天看點

在eclipse開發工具中使用JUnit4進行單元測試詳解(二)提高篇

本文是在前人的基礎上完善而成http://blog.csdn.net/andycpp/article/details/1327346

通過上一篇文章我們成功的在eclipse開發工具中生成了一個JUnit4測試架構,下面我們來分析一下這個測試架構中的每個細節,以便于對JUnit單元測試架構有個更深入的了解。

一、測試類CalculatorTest相對于待測類Calculator的放置方式

采用并行樹的方式進行放置,即測試類和待測類放于同一個包(com.edward.junit)中,但位于不同的源代碼(src與test)樹下,而這兩棵樹的根都在編譯器的class-path(同屬項目JUnitTestProject)中。這樣既能保證測試類CalculatorTest能夠通路待測類Calculator中的protected成員變量和方法,又能保證測試代碼與待測代碼的相對獨立性,避免測試代碼到處都是,堆積在待測代碼目錄中易于待測代碼混淆。

在eclipse開發工具中使用JUnit4進行單元測試詳解(二)提高篇

二、測試類的聲明

在JUnit4中測試類的聲明相對比較靈活,是一個獨立的類,沒有任何父類,但在JUnit3之前,則要求測試類必須繼承自TestCase類。

測試類的名字也可以任意命名,沒必要像JUnit3之前的那樣,必須以Test結尾,但為了展現代碼的規範性還是建議測試類以Test結尾。

測試類必須是公有類必須用public關鍵字修飾,這點與JUnit3之前是一樣的,否則測試類将不被執行。

三、建立并初始化待測類的對象

首先,要測試哪個類就先聲明一個該類的引用

private Calculator calculator = null;//一、建立被測對象
           

然後,在setUp()方法中,初始化待測類的對象

@Before
	public void setUp() throws Exception {
		//生成成員變量執行個體
		 calculator = new Calculator();//二、初始化被測對象
	}
           

由于@Before标注的setUp()方法會在本類中每個測試方法執行之前都要執行一遍,這樣可保證執行每個測試方法時,都有一個新的對象去掉用待測類的待測方法,保證各測試方法運作的獨立性,避免不同的待測方法被同一待測類的對象調用時,互相幹擾,影響待測方法的輸出結果,造成測試失敗。

四、測試方法的聲明

在JUnit3之前測試方法的聲明,存在四項必須準守的準則,即

    1、測試方法必須是共有的(public關鍵字修飾)

    2、測試方法的傳回值必須被聲明為void.

    3、測試方法的方法名的前置名詞必須是test.

    4、測試方法不能傳入任何參數。

但在JUnit4中,由于采用了java5中的新特性Annotation(注解)簡化了測試方法的編寫,測試方法的方法名的前置名詞不用必須是test,隻要以@Test中繼資料來标記即可,但為了展現代碼的規範性和可讀性,還是建議加上前置名詞test。

五、測試方法的編寫

    1、在測試方法上方用@Test進行标注,指明該方法為測試方法。

    2、用待測類的對象調用被測方法,取得方法的傳回值或系統狀态的變化

    3、建立“期待結果”

    4、調用合适的Assert方法,進行方法的傳回值或系統狀态的變化與期待結果的比較。

@Test//1、在測試方法上方用@Test進行标注,指明該方法為測試方法。
	public void testMultiply() {
		int result = calculator.multiply(2, 3);//2、用待測類的對象調用被測方法,取得方法的傳回值或系統狀态的變化
		assertEquals(6, result);//3、建立“期待結果,即6;4、調用合适的Assert方法,進行方法的傳回值或系統狀态的變化與期待結果的比較。
	}
           

六、項目中的導包;

import static org.junit.Assert.assertEquals;

1、Assert靜态類是一系列斷言方法的集合:Assert包含了一組靜态的測試方法,用于實際值與期望值相比是否正确,如果錯誤,即測試失敗,Assert類就會抛出一個AssertionFailedError異常,JUnit  測試架構将這種錯誤歸入Failes并加以記錄,同時标志為未通過測試。如果該  類方法中指定一個String類型的傳參則該參數将被做為AssertionFailedError異常的辨別資訊,告訴測試人員此異常的詳細資訊。

2、Junit提供了6大類31組斷言方法,包括基礎斷言、數字斷言、字元斷言、布爾斷言、對象斷言。

由于Assert類為靜态類,是以我們在導包時,直接import static org.junit.Assert.assertEquals,這樣我們在測試代碼中可直接使用assertEquals(“期待結果”,運作結果)方法。