熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Eclipse 3.1中用注釋單元測試框架(圖)

2013-11-23 20:24:32  來源: Java開源技術 

  這篇文章將為大家介紹TestNG這個新的測試框架的特性以及TestNG優於JunitX的地方
  
  TestNG(Test Next Generation)顧名思義下一代的測試框架它是基於JSE的注釋特性的而構建的輕量級的單元測試框架結構說起單元測試框架大家都會自然地聯想到JUnit用過JUnitX的程序開發人員都會發現JUnit在提供了強大功能的同時也存在很多令人沮喪的地方其中一個問題就是JUnitx 在每個測試方法調用前和調用後都會調用setUp()和tearDown()的方法如果開發人員希望在不同的測試方法中重用同一個JDBC連接或者JNDI的Context的時候會覺得很不方便一般的解決這個問題的方法是使用靜態方法而這樣的話就必須小心並發控制的問題(多個線程訪問共享的靜態對象)除此之外JUnit X對於多線程測試也比較麻煩需要其他模塊的支持
  
  這篇文章將為大家介紹TestNG這個新的測試框架的特性以及TestNG優於JunitX的地方眾所周知Eclipse不僅僅是功能強大的Java IDE同時也是一個開放的應用集成平台而Eclipse提供了對JSE的支持因此筆者將以Eclipse為運行環境介紹Testng的安裝使用和運行Eclipse可以從下載
  
  關於注釋
  
  由於TestNG是基於JSE的注釋特性所構建的因此讀者在閱讀本文之前必須了解注釋的一些基本概念關於JSE的注釋特性筆者曾經在另一篇文章中詳細的介紹過詳細介紹請參考參考資料這裡只簡單的介紹一些概念
  
  注釋是JSE所新提供的對於元數據的支持程序開發人員可以在不改變原有邏輯的情況下在源文件嵌入一些補充的信息注釋都是由@Interface annotationName 來聲明的注釋可以用來修飾類定義方法域變量等等使用的時候是在修飾的對象的定義前@annotationName注釋可以包含多個屬性使用的時候為屬性賦值例如 @annotationName(prop=valueprop=value)程序的開發人員還可以通過Java的反射特性在運行時獲得這些注釋的信息在後面的章節中大家會看到TestNG是如何使用它所定義的注釋類型的來實現測試框架的
  
  安裝TestNG
  
  在Eclipse中安裝testNG很簡單和安裝其他的plugin的方法相似首先啟動Eclipse在Help>Software Update>Find and Install 在彈出的向導中選擇Search New Features to Install 點擊New Remote Site如圖所示在URL中輸入 點擊OK如圖所示點擊FinishEclipse會幫助你完成下面的安裝熟悉Eclipse的讀者對這個過程一定不會覺得陌生
  
  圖 新建Update Site
  
 educitycn/img_///jpg >

  圖 安裝TestNG
  
 educitycn/img_///jpg >

  安裝好TestNG後在Eclipse中單擊Window>Show View>Other>Java>TestNG TestNG的視圖就打開了
  
  圖 TestNG的視圖
  
 educitycn/img_///jpg>

  注意TestNG的視圖的作用時為了現實測試結果為了顯示視圖的功能的視圖是運行了一個測試用例後的結果讀者如果是第一次打開視圖應該是空白的
  
  一個簡單的例子
  
  TestNG和JUnit不同他使用注釋正則表達式和基於XML的配置文件對測試方法進行配置的我們先來看一個簡單的例子
  
  ) 在Eclipse中創建一個Java的項目comcatherinelabtestngdemo
  
  ) 在Packet Explorer中右鍵點擊剛生成的項目選擇Properties
  
  ) 在Properties屬性框中選擇Java Build Path點擊Add External JARs…
  
  ) 在文件浏覽的對話框中選擇{eclipse home directory}/plugins/combeusttestngeclipse_XXX/eclipse_testngjar以及 {eclipse home directory}/plugins/combeusttestngeclipse_XXX/lib/testngjdkjar/以及testngjdkjar 點擊OK
  
  ) 在Project中創建一個package: comcatherinelabtestngfirstTest在package裡邊創建一個類FristTestSample
  
  清單 TestNG的第一個例子
  
  package comcatherinelabtestngfirstTest;
  import combeusttestngannotations*;
  public class FirstTestSample {
  public FirstTestSample() {
  super();
  }
  @Test
  public void testPass() {
  assert true : This test should pass;
  }
  
  @Test
  public void testFail() {
  assert false : This test will fail;
  }
  
  @Configuration(beforeTestClass = true)
  public void doBeforeTests() {
  Systemoutprintln(invoke before test class!);
  }
  
  @Configuration(afterTestClass = true)
  public void doAfterTests() {
  Systemoutprintln(invoke after test class!);
  }
  }
  
  ) 在Eclipse中打開Run>Run如圖所示 首先在選擇使用TestNG的Project而後在選擇編寫了測試邏輯的Class點擊Run測試結果就顯示在TestNG的視圖中了如圖所示
  
  圖 配置運行TestNG的程序
  
 educitycn/img_///jpg >

  圖 TestNG的運行結果
  
 educitycn/img_///jpg >

  這是一個完整的測試用例和JUnit不同TestNG中實現測試邏輯的類不需要繼承任何父類測試方法也無需遵循testXXX的命名規則
  
  TestNG的類是大家所非常熟悉的普通的Java類而在這個類中所有的被@Test這個注釋所修飾的方法都會被當作測試方法來運行除了測試類之外TestNG還需要了一個配置文件用來配置測試過程以下是一個簡單的配置文件testngxml
  
  清單 testNG的配置文件
  
  <!DOCTYPE suite SYSTEM dtd >
  <suite name=My First TestNG test>
  <test name=Hello Test!>
  <classes>
  <class name= comcatherinelabtestngfirstTestFirstTestSample />
  </classes>
  </test>
  </suite>
  
  testngxml可以配置測試套件<suite>類似於JUnit的TestSuite而<test>類似於JUnit中的TestCase所不同的是 TestNG中的測試套件可以包括多個測試用例一個測試用例可以包括多個測試類而一個測試類中可以定義多個測試方法在下面的例子中我們將看到這個配置文件更復雜的應用
  
  在圖的運行配置中我們也可以設置一個xml文件作為配置文件而不是直接使用測試類其實我們使用測試類的時候testNG也幫我們生成了一個缺省的xml文件不相信的話你可以切換到Resource Perspective然後刷新Workspace就會發現這個project裡邊生成了一個xml文件而這個文件就是TestNG的缺省的配置文件
  
  現在我們再回到清單大家在上面的程序清單中會發現除了使用@Test這個注釋以外我們還使用了@Configuration這個注釋下面我們就來介紹@Configuration這個注釋的用途
  
  在注釋Configuration中定義了以下的屬性
  
  清單 configuration中的屬性
  
  public boolean beforeSuite() default false;
  public boolean afterSuite() default false;
  
  public boolean beforeTest() default false;
  public boolean afterTest() default false;
  
  public boolean beforeTestClass() default false;
  public boolean afterTestClass() default false;
  
  public boolean beforeTestMethod() default false;
  public boolean afterTestMethod() default false;
  
  beforeSuite=true所修飾的方法將在測試套件(也就是配置文件中的Suite Tag)中任何一個方法調用之前調用一次
  afterSuite=true所修飾的方法將在測試套件中所有方法都調用過後調用一次
  beforeTest=true在測試用例(配置文件中Test Tag)中任何一個測試方法調用之前調用一次
  afterTest=true 在測試用例中任何所有方法都調用之後調用一次
  beforeTestClass=true在測試類中任何測試方法調用之前調用一次
  afterTestClass=true在這個測試類中所有方法都調用過後調用一次
  beforeTestMethod=true在每個測試方法調用之前調用一次
  afterTestMethod=true在每個測試方法調用之後調用一次
  這個清單中doBeforeTests()方法在任何一個test方法調用之前被調用一次doAfterTests就是所有的test方法運行過了以後再調用一次從Console輸出的信息中我們可以驗證這一點
  
  圖 console輸出的運行信息
  
educitycn/img_///jpg >

  回頁首
  
  更復雜的例子
  
  上一節中我們介紹了使用testNG的一個最簡單的例子這一節中我們將介紹一些關於testNG的高級應用注釋Test除了標志其修飾的方法為測試方法 還提供了groups的屬性比如上面例子的兩個方法testPass()和testFail()我們可以給這兩個方法加上group的屬性

From:http://tw.wingwit.com/Article/program/Java/ky/201311/28453.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.