這篇文章將為大家介紹TestNG這個新的測試框架的特性
以及TestNG優於Junit
X的地方
TestNG(Test Next Generation)
顧名思義
下一代的測試框架
它是基於J
SE
的注釋特性的而構建的輕量級的單元測試框架結構
說起單元測試框架
大家都會自然地聯想到JUnit
用過JUnit
X的程序開發人員
都會發現JUnit在提供了強大功能的同時
也存在很多令人沮喪的地方
其中一個問題就是
JUnit
x 在每個測試方法調用前和調用後都會調用setUp()和tearDown()的方法
如果開發人員希望在不同的測試方法中重用同一個JDBC連接或者JNDI的Context的時候
會覺得很不方便
一般的解決這個問題的方法是使用靜態方法
而這樣的話
就必須小心並發控制的問題(多個線程訪問共享的靜態對象)
除此之外
JUnit
X對於多線程測試也比較麻煩
需要其他模塊的支持
這篇文章將為大家介紹TestNG這個新的測試框架的特性
以及TestNG優於Junit
X的地方
眾所周知
Eclipse不僅僅是功能強大的Java IDE
同時也是一個開放的應用集成平台
而Eclipse
提供了對J
SE
的支持
因此
筆者將以Eclipse為運行環境
介紹Testng的安裝
使用和運行
Eclipse
可以從下載
關於注釋 由於TestNG是基於J
SE
的注釋特性所構建的
因此讀者在閱讀本文之前
必須了解注釋的一些基本概念
關於J
SE的注釋特性
筆者曾經在另一篇文章中詳細的介紹過
詳細介紹請參考
參考資料
這裡只簡單的介紹一些概念
注釋是J
SE
所新提供的對於元數據的支持
程序開發人員可以在不改變原有邏輯的情況下
在源文件嵌入一些補充的信息
注釋都是由@Interface annotationName 來聲明的
注釋可以用來修飾類定義
方法
域變量等等
使用的時候是在修飾的對象的定義前@annotationName
注釋可以包含多個屬性
使用的時候為屬性賦值
例如 @annotationName(prop
=value
prop
=value
)
程序的開發人員還可以通過Java的反射特性
在運行時獲得這些注釋的信息
在後面的章節中
大家會看到TestNG是如何使用它所定義的注釋類型的來實現測試框架的
安裝TestNG 在Eclipse中安裝testNG很簡單
和安裝其他的plugin的方法相似
首先啟動Eclipse
在Help
>Software Update
>Find and Install
在彈出的向導中
選擇
Search New Features to Install
點擊
New Remote Site
如圖
所示
在URL中輸入
點擊
OK
如圖
所示
點擊
Finish
Eclipse會幫助你完成下面的安裝
熟悉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的項目
com
catherine
lab
testng
demo
) 在Packet Explorer中
右鍵點擊剛生成的項目
選擇Properties
) 在Properties屬性框中
選擇
Java Build Path
點擊
Add External JARs…
) 在文件浏覽的對話框中
選擇{eclipse
home directory}/plugins/com
beust
testng
eclipse_XXX/eclipse_testng
jar
以及 {eclipse
home directory}/plugins/com
beust
testng
eclipse_XXX/lib/testng
jdk
jar/以及testng
jdk
jar
點擊OK
) 在Project中創建一個package: com
catherine
lab
testng
firstTest
在package裡邊創建一個類
FristTestSample
清單
TestNG的第一個例子
package com
catherine
lab
testng
firstTest;
import com
beust
testng
annotations
*;
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() {
System
out
println(
invoke before test class!
);
}
@Configuration(afterTestClass = true)
public void doAfterTests() {
System
out
println(
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還需要了一個配置文件
用來配置測試過程
以下是一個簡單的配置文件
testng
xml
清單
testNG的配置文件
<!DOCTYPE suite SYSTEM
dtd
>
<suite name=
My First TestNG test
>
<test name=
Hello Test!
>
<classes>
<class name=
com
catherine
lab
testng
firstTest
FirstTestSample
/>
</classes>
</test>
</suite>
testng
xml可以配置測試套件<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