版本歷史java |
該教程主要講解 JUnit 4.x 版本的使用,以及如何在Eclipse IDE 中如何使用JUnit 數據庫
目錄 編程
1. Junit介紹 3 框架
1.1. 簡介 3 eclipse
2.1. 對於極限編程而言 3 單元測試
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做爲單元測試的工具。
要求在編寫代碼以前先寫測試,這樣能夠強制你在寫代碼以前好好的思考代碼(方法)的功能和邏輯,不然編寫的代碼很不穩定,那麼你須要同時維護測試代碼和實際代碼,這個工做量就會大大增長。所以在極限編程中,基本過程是這樣的:構思-> 編寫測試代碼-> 編寫代碼-> 測試,並且編寫測試和編寫代碼都是增量式的,寫一點測一點,在編寫之後的代碼中若是發現問題能夠較快的追蹤到問題的緣由,減少迴歸錯誤的糾錯難度。
其好處和極限編程中是相似的,由於重構也是要求改一點測一點,減小回歸錯誤形成的時間消耗。
咱們在開發的時候使用junit寫一些適當的測試也是有必要的,由於通常咱們也是須要編寫測試的代碼的,可能原來不是使用的junit,若是使用junit,並且針對接口(方法)編寫測試代碼會減小之後的維護工做,例如之後對方法內部的修改(這個就是至關於重構的工做了)。另外就是由於junit有斷言功能,若是測試結果不經過會告訴咱們哪一個測試不經過,爲何,而若是是像之前的通常作法是寫一些測試代碼看其輸出結果,而後再由本身來判斷結果使用正確,使用junit的好處就是這個結果是否正確的判斷是它來完成的,咱們只須要看看它告訴咱們結果是否正確就能夠了,在通常狀況下會大大提升效率。
JUnit 4.x 引用了註解的方式來對方法進行測試。一般測試方法都是被包含在一個 測試類 中
使用下面的代碼來建立一個單元測試 . 經過以下操做: File → New → JUnit → JUnit 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 As → JUnit Test。
也可使用類 org.junit.runner.JUnitCore運行測試類,而不依賴於Eclipse。
該方法能夠標記須要測試的類,選擇要執行的測試。只有被選定的測試將會執行。
註解 |
描述 |
@Test public void method() |
@Test 註解表明方法是一個測試方法。 |
@Test (expected = Exception.class) |
表示預期會拋出Exception.class 的異常 |
@Test(timeout=100) |
表示預期方法執行不會超過 100 毫秒. |
@Before |
表示該方法在每個測試方法以前運行,可使用該方法進行初始化之類的操做 |
@After |
表示該方法在每個測試方法以後運行,可使用該方法進行釋放資源,回收內存之類的操做 |
@BeforeClass |
表示該方法只執行一次,而且在全部方法以前執行。通常可使用該方法進行數據庫鏈接操做,注意該註解運用在靜態方法。 |
@AfterClass |
表示該方法只執行一次,而且在全部方法以後執行。通常可使用該方法進行數據庫鏈接關閉操做,注意該註解運用在靜態方法。 |
@Ignore |
表示該方法忽略。通常在低層代碼有所改動,可是未實現,能夠暫時忽略掉。也能夠忽略掉執行時間過長的測試。 |
JUnit在類 Assert提供了一些靜態的方法來測試某些條件。這些方法通常以 assert開頭,容許你指定消息( message ),預期的值 ( expected ),真實的值 ( actual )。一個斷言方法比較返回的真實值和預期值,若是比較失敗則會拋出 AssertionException 異常
下表給出了JUnit 4.x可使用的斷言方法的一個概述. 參數中的[]表示可選。
語句 |
描述 |
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) |
表示兩個變量指向非同一個引用。 |
若是你須有多個測試單元,能夠合併成一個測試套件進行測試。而且能夠按照指定的順序執行全部的測試類。
下面的代碼示例建立了一個測試套件來執行兩個測試單元。若是你要添加其餘的測試單元可使用語句 @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 {
}
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
Eclipse容許你使用不一樣版本Junit進行集成。通常Eclipse已經默認集成了JUnit3.x和JUnit4.x 不一樣的版本
能夠從下面的官網下載 JUnit4.x.jar. 下載好的 junit-4.*.jar 添加到classpath.
http://junit.org/
右鍵單擊選中的類,在Package Explorer視圖中右鍵選中 New → JUnit Test Case.
File → New → Other... → Java → JUnit.
要運行測試類,選中包含測試方法的類。右鍵點擊 Run-as → JUnit 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運行它們。
默認的狀況下該視圖顯示全部的測試信息。你能夠經過以下配置設置只顯示失敗的測試。
Eclipse 支持JUnit 的靜態導入功能,使用 Ctrl+1 或者 Content Assist功能快捷鍵 。查看下圖。
Content Assist 對靜態導入的配置。
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... → JUnit → JUnit Test Suite.
在Eclipse中建立測試套件的方法
右鍵選中須要建立套件的包,選中 New → Other... → JUnit → JUnit Test Suite.
註解 @Test (expected = Exception.class) 限制了只能測試一個異常。可使用下面的代碼測試更多異常。
@Test
public void testExceptions() {
try {
StringUtil.mustThrowException();
fail();
} catch( Exception e ) {
// expected.
}
try {
StringUtil.mustThrowException();
fail();
} catch( Exception e ) {
// expected.
}
}