JUnit是一個迴歸測試框架(regression testing framework)。Junit測試是程序員測試,即所謂白盒測試,由於程序員知道被測試的軟件如何(How)完成功能和完成什麼樣(What)的功能。Junit是一套框架,繼承TestCase類,就能夠用Junit進行自動測試了。java
Junit的環境配置
環境:Myeclipse 中配置junit,選擇項目Junit4(在Package Explorer中) -> 右擊鼠標 -> 選擇properties -> 選擇Java Build Path (在左邊的菜單中) -> 在右邊選擇標籤 Libraries -> 單擊按鈕「Add Library」 -> 選擇JUnit , 單擊按鈕 「Next>」 -> 選擇JUnit library version 爲: JUnit4 -> 單擊按鈕「Finish」 –> 單擊按鈕 「OK」程序員
MyEclipse中建立Junit 的步驟以下:框架
一、選擇一個存放測試類的package,右鍵-->new-->Other-->Java-->JUnit-->JUnit Test Case-->填寫完測試類的名字,選擇所要使用的JUnit 的版本【注:JUnit 4支持@解釋表示符,建議使用】,可根據狀況,選擇是否自動生成:setUpBeforeClass()【注:靜態方法,在測試類執的測試方法執行前被系統調用,只被調用一次】,tearDownAfterClass()【注:靜態方法,在測試類的全部測試方法執行完畢後被系統調用,只被調用一次】,setUp()【注:非靜態方法,在每一個測試方法執行前,被系統調用,有多少個測試方法,就被調用多少次】,tearDown()【注:非靜態方法,在每一個測試方法執行完畢後,被系統調用,有多少個測試方法,就被調用多少次】這些方法。 而後,點「finish」 ,這樣就建立了一個 Junit Case。eclipse
執行成功後,右側顯示綠色。error指的是程序自己錯誤,failures指測試失敗函數
在寫測試代碼時須要注意:測試
1.測試類是一個獨立的類,沒有任何父類,它與普通類的區別在於內部方法的聲明ui
2.建立一個待測試的對象。測試哪一個類,要建立該類對象.net
3.測試方法的聲明,以@做爲開頭,是junit4自定義的,要掌握標註的含義、設計
如:若是你在寫程序前作了很好的規劃,那麼哪些方法是什麼功能都應該實現定下來。所以,即便該方法還沒有完成,他的具體功能也是肯定的,這也就意味着你能夠爲他編寫測試用例。可是,若是你已經把該方法的測試用例寫完,但該方法還沒有完成,那麼測試的時候必定是「失敗」。這種失敗和真正的失敗是有區別的,所以JUnit提供了一種方法來區別他們,那就是在這種測試函數的前面加上@Ignore標註,這個標註的含義就是「某些方法還沒有完成,暫不參與這次測試」。這樣的話測試結果就會提示你有幾個測試被忽略,而不是失敗。一旦你完成了相應函數,只須要把@Ignore標註刪去,就能夠進行正常的測試。htm
Fixture
Fixture的含義就是「在某些階段必然被調用的代碼」。好比咱們上面的測試,因爲只聲明瞭一個Calculator對象,他的初始值是0,可是測試完加法操做後,他的值就不是0了;接下來測試減法操做,就必然要考慮上次加法操做的結果。這絕對是一個很糟糕的設計!咱們很是但願每個測試都是獨立的,相互之間沒有任何耦合度。所以,咱們就頗有必要在執行每個測試以前,對Calculator對象進行一個「復原」操做,以消除其餘測試形成的影響。所以,「在任何一個測試執行以前必須執行的代碼」就是一個Fixture,咱們用@Before來標註它。
從上面的例子能夠看到在JUnit 4中還引入了一些其餘的元數據,下面一一介紹:
@Before:
使用了該元數據的方法在每一個測試方法執行以前都要執行一次。
@After:
使用了該元數據的方法在每一個測試方法執行以後要執行一次。
注意:@Before和@After標示的方法只能各有一個。這個至關於取代了JUnit之前版本中的setUp和tearDown方法,固然你還能夠繼續叫這個名字,不過JUnit不會霸道的要求你這麼作了。
@Test(expected=*.class)
在JUnit4.0以前,對錯誤的測試,咱們只能經過fail來產生一個錯誤,並在try塊裏面assertTrue(true)來測試。如今,經過@Test元數據中的expected屬性。expected屬性的值是一個異常的類型
@Test(timeout=xxx):
該元數據傳入了一個時間(毫秒)給測試方法,
若是測試方法在制定的時間以內沒有運行完,則測試也失敗。
@BefreClass 全部測試開始以前運行。
@AfterClass 全部測試結果以後運行。
@BeforeClass 和 @AfterClass兩個Fixture來幫咱們實現這個功能。從名字上就能夠看出,用這兩個Fixture標註的函數,只在測試用例初始化時執行@BeforeClass方法,當全部測試執行完畢以後,執行@AfterClass進行收尾工做。在這裏要注意一下,每一個測試類只能有一個方法被標註爲@BeforeClass 或 @AfterClass,而且該方法必須是Public和Static的。
http://blog.csdn.net/hongyanjava/article/details/15814155
4.在測試類中,編寫的測試方法使用@test標註,代表這是一個測試方法。方法名字沒有限制,返回值是void,並且不能有任何參數。若是違反這些規則,運行時會拋出異常。