欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
華東軟件測試論壇 | 文章



這篇文章將為大家介紹TestNG這個(gè)新的測試框架的特性,以及TestNG優(yōu)于Junit3.X的地方。

TestNG(Test Next Generation),顧名思義,下一代的測試框架。它是基于J2SE5.0的注釋特性的而構建的輕量級的單元測試框架結構。說(shuō)起單元測試框架,大家都會(huì )自然地聯(lián)想到JUnit。用過(guò)JUnit3.X的程序開(kāi)發(fā)人員,都會(huì )發(fā)現JUnit在提供了強大功能的同時(shí),也存在很多令人沮喪的地方。其中一個(gè)問(wèn)題就是,JUnit3.x 在每個(gè)測試方法調用前和調用后都會(huì )調用setUp()和tearDown()的方法。如果開(kāi)發(fā)人員希望在不同的測試方法中重用同一個(gè)JDBC連接或者JNDI的Context的時(shí)候,會(huì )覺(jué)得很不方便。一般的解決這個(gè)問(wèn)題的方法是使用靜態(tài)方法,而這樣的話(huà),就必須小心并發(fā)控制的問(wèn)題(多個(gè)線(xiàn)程訪(fǎng)問(wèn)共享的靜態(tài)對象)。除此之外,JUnit 3.X對于多線(xiàn)程測試也比較麻煩,需要其他模塊的支持。

吳嫣 IBM

 

這篇文章將為大家介紹TestNG這個(gè)新的測試框架的特性,以及TestNG優(yōu)于Junit3.X的地方。眾所周知,Eclipse不僅僅是功能強大的Java IDE,同時(shí)也是一個(gè)開(kāi)放的應用集成平臺。而Eclipse3.1提供了對J2SE5.0的支持。因此,筆者將以Eclipse為運行環(huán)境,介紹Testng的安裝,使用和運行。Eclipse3.1可以從http://www.eclipse.org/downloads/index.php下載。

關(guān)于注釋

由于TestNG是基于J2SE5.0的注釋特性所構建的。因此讀者在閱讀本文之前,必須了解注釋的一些基本概念。關(guān)于J2SE的注釋特性,筆者曾經(jīng)在另一篇文章中詳細的介紹過(guò),詳細介紹請參考"參考資料"。這里只簡(jiǎn)單的介紹一些概念。

注釋是J2SE5.0所新提供的對于元數據的支持。程序開(kāi)發(fā)人員可以在不改變原有邏輯的情況下,在源文件嵌入一些補充的信息。注釋都是由@Interface annotationName 來(lái)聲明的。注釋可以用來(lái)修飾類(lèi)定義,方法,域變量等等。使用的時(shí)候是在修飾的對象的定義前@annotationName。注釋可以包含多個(gè)屬性,使用的時(shí)候為屬性賦值,例如 @annotationName(prop1=value1,prop2=value2)。程序的開(kāi)發(fā)人員還可以通過(guò)Java的反射特性,在運行時(shí)獲得這些注釋的信息。在后面的章節中,大家會(huì )看到TestNG是如何使用它所定義的注釋類(lèi)型的來(lái)實(shí)現測試框架的。


安裝TestNG

在Eclipse中安裝testNG很簡(jiǎn)單。和安裝其他的plugin的方法相似。首先啟動(dòng)Eclipse3.1,在Help->Software Update->Find and Install, 在彈出的向導中,選擇"Search New Features to Install", 點(diǎn)擊"New Remote Site",如圖1所示。在URL中輸入 http://beust.com/eclipse,點(diǎn)擊"OK"。如圖2所示,點(diǎn)擊"Finish",Eclipse會(huì )幫助你完成下面的安裝。熟悉Eclipse的讀者對這個(gè)過(guò)程一定不會(huì )覺(jué)得陌生。


圖1 新建Update Site


圖2 安裝TestNG

安裝好TestNG后,在Eclipse中單擊"Window"->Show View->Other->Java->TestNG, TestNG的視圖就打開(kāi)了。


圖3 TestNG的視圖

注意:TestNG的視圖的作用時(shí)為了現實(shí)測試結果。為了顯示視圖的功能,圖3的視圖是運行了一個(gè)測試用例后的結果。讀者如果是第一次打開(kāi)視圖,應該是空白的。



回頁(yè)首


一個(gè)簡(jiǎn)單的例子

TestNG和JUnit不同,他使用注釋、正則表達式和基于XML的配置文件對測試方法進(jìn)行配置的。我們先來(lái)看一個(gè)簡(jiǎn)單的例子。

1) 在Eclipse中創(chuàng )建一個(gè)Java的項目,com.catherine.lab.testng.demo

2) 在Packet Explorer中,右鍵點(diǎn)擊剛生成的項目,選擇Properties。

3) 在Properties屬性框中,選擇"Java Build Path",點(diǎn)擊"Add External JARs…"

4) 在文件瀏覽的對話(huà)框中,選擇{eclipse 3.1 home directory}/plugins/com.beust.testng.eclipse_XXX/eclipse_testng.jar,以及 {eclipse 3.1 home directory}/plugins/com.beust.testng.eclipse_XXX/lib/testng-jdk14.jar/以及testng-jdk15.jar. 點(diǎn)擊OK

5) 在Project中創(chuàng )建一個(gè)package: com.catherine.lab.testng.firstTest。在package里邊創(chuàng )建一個(gè)類(lèi):FristTestSample.


清單1 TestNG的第一個(gè)例子
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!");	}}

6) 在Eclipse中打開(kāi)Run->Run..,如圖4所示。 首先在選擇使用TestNG的Project,而后在選擇編寫(xiě)了測試邏輯的Class,點(diǎn)擊Run。測試結果就顯示在TestNG的視圖中了。如圖5所示。


圖4 配置運行TestNG的程序


圖5 TestNG的運行結果

這是一個(gè)完整的測試用例。和JUnit不同,TestNG中實(shí)現測試邏輯的類(lèi)不需要繼承任何父類(lèi)。測試方法也無(wú)需遵循testXXX的命名規則。

TestNG的類(lèi)是大家所非常熟悉的普通的Java類(lèi),而在這個(gè)類(lèi)中,所有的被@Test這個(gè)注釋所修飾的方法都會(huì )被當作測試方法來(lái)運行。除了測試類(lèi)之外,TestNG還需要了一個(gè)配置文件,用來(lái)配置測試過(guò)程。以下是一個(gè)簡(jiǎn)單的配置文件:testng.xml。


清單2 testNG的配置文件
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.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>,類(lèi)似于JUnit的TestSuite。而<test>類(lèi)似于JUnit中的TestCase。所不同的是, TestNG中的測試套件可以包括多個(gè)測試用例,一個(gè)測試用例可以包括多個(gè)測試類(lèi),而一個(gè)測試類(lèi)中可以定義多個(gè)測試方法。在下面的例子中,我們將看到這個(gè)配置文件更復雜的應用。

在圖4的運行配置中,我們也可以設置一個(gè)xml文件作為配置文件,而不是直接使用測試類(lèi)。其實(shí)我們使用測試類(lèi)的時(shí)候,testNG也幫我們生成了一個(gè)缺省的xml文件。不相信的話(huà),你可以切換到Resource Perspective,然后刷新Workspace,就會(huì )發(fā)現這個(gè)project里邊生成了一個(gè)xml文件,而這個(gè)文件就是TestNG的缺省的配置文件。

現在我們再回到清單1,大家在上面的程序清單中會(huì )發(fā)現,除了使用@Test這個(gè)注釋以外,我們還使用了@Configuration這個(gè)注釋。下面我們就來(lái)介紹@Configuration這個(gè)注釋的用途。

在注釋Configuration中,定義了以下的屬性:


清單3 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)中任何一個(gè)方法調用之前,調用一次
  • afterSuite=true,所修飾的方法將在測試套件中所有方法都調用過(guò)后,調用一次
  • beforeTest=true,在測試用例(配置文件中Test Tag)中任何一個(gè)測試方法調用之前,調用一次
  • afterTest=true, 在測試用例中任何所有方法都調用之后,調用一次
  • beforeTestClass=true,在測試類(lèi)中任何測試方法調用之前,調用一次
  • afterTestClass=true,在這個(gè)測試類(lèi)中所有方法都調用過(guò)后,調用一次
  • beforeTestMethod=true,在每個(gè)測試方法調用之前,調用一次
  • afterTestMethod=true,在每個(gè)測試方法調用之后,調用一次

這個(gè)清單1中doBeforeTests()方法,在任何一個(gè)test方法調用之前被調用一次。doAfterTests,就是所有的test方法運行過(guò)了以后再調用一次。從Console輸出的信息中,我們可以驗證這一點(diǎn):


圖6 console輸出的運行信息



回頁(yè)首


更復雜的例子

上一節中我們介紹了使用testNG的一個(gè)最簡(jiǎn)單的例子,這一節中我們將介紹一些關(guān)于testNG的高級應用。注釋Test除了標志其修飾的方法為測試方法, 還提供了groups的屬性。比如上面例子的兩個(gè)方法testPass()和testFail(),我們可以給這兩個(gè)方法加上group的屬性。


清單4 測試@Test的groups屬性
     @Test(groups={"functional_test"})    public void testPass() {    		assert true :  "This test should pass.";    }        @Test(groups={"checkin_test"})    public void testFail() {    		assert false : "This test will fail";    }	   }   

而后打開(kāi)Run->Run…,在配置文件的Runtime配置中選擇Groups,然后選擇你要運行的group的名字。


圖7 運行選定的測試組

這個(gè)時(shí)候我們從TestNG中看到測試結果,只有testPass運行了,而testFail因為不屬于funcational_test這個(gè)組,因此并沒(méi)有運行。


圖8 運行結果

和第一個(gè)例子類(lèi)似,雖然我們在這里并沒(méi)有顯示地定義配置文件,testNG已經(jīng)生成了相應的配置文件了。在Resource Perspective底下可以看到這個(gè)文件:Custom_SuiteXXXX.xml.


清單5 自動(dòng)生成的配置文件
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My First TestNG test">   <test name="Hello Test!"><groups>    <run>      <include name="functional_test"/>     </run>  </groups>    <classes>      <class name=" com.catherine.lab.testng.firstTest.FirstTestSample " />    </classes>  </test></suite>

除了groups屬性以外,注釋Test還支持屬性dependsOnMethods和屬性dependsOnGroups. 這兩個(gè)屬性主要用于規定測試方法的執行順序。

TestNG并不保證按照定義的順序執行測試方法。如果這些測試方法之間有依賴(lài)關(guān)系的話(huà),那么我們就可以使用dependsOnXXXX的屬性。我們還是看第一個(gè)例子,現在我們在這個(gè)例子里邊增加了一個(gè)方法:

setupEnvforPass()。我們希望setupEnvforPass()方法在testPass方法前執行,我們修改了testPass的test注釋。如清單6所示:


清單6 測試@Test的屬性dependsOnMethods
    @Test(groups={"functional_test"},dependsOnMethods = { "setEnvForPass" })    public void testPass() {    		assert true :  "This test should pass.";    }        @Test(groups={"checkin_test"})    public void testFail() {    		assert false : "This test will fail";}	@Test(groups = {"init"})public void setEnvForPass(){   assert true: "This is dependent method"}   }  

運行配置和配置文件都不需要改動(dòng),現在我們來(lái)運行這個(gè)例子,測試結果如圖9所示。大家可以看到,雖然我們在testPass方法之后定義了,setEnvForPass方法,但是由于我們將setEnvForPass定義為testPass的以來(lái)方法,setEnvForPass在testPass前執行了。

同樣,我們可以定義dependsOnGroups的屬性,這樣只有Groups中所有的方法都被執行完,這個(gè)方法才會(huì )被執行。注意:如果depensOnGroups中制定的group在配置文件中被excluded了,那么這個(gè)方法會(huì )依然被執行。但是如果指定的group在配置文件中被include了,而group中的方法有錯誤的話(huà),那么這個(gè)方法會(huì )被skip,不會(huì )被執行。


圖9 運行結果

下面我們要介紹一個(gè)新的注釋類(lèi)型: @Parameter。

TestNG的測試方法可以帶有參數,參數可以通過(guò)@Parameter來(lái)聲明,具體的參數值在testng.xml中定義。這是testng的一個(gè)很優(yōu)越的特性。我們還是在以前的例子上的基礎上來(lái)驗證這個(gè)特性。我們?yōu)閟etEnvForPass這個(gè)方法定義一個(gè)參數,target_server,并且在測試方法中打印這個(gè)參數。


清單7 測試注釋Parameter
@Parameters({ "target_server" })@Test(groups = {"init"})public void setEnvForPass(String targetServer){   assert true: "This is dependent method";System.out.println(targetServer);}   }

Target_server的值在testng.xml中定義。在TestNG的運行時(shí)配置中選擇Suite,然后Browse清單8中定義好的的testng.xml。運行TestNG,我們從Console的運行結果中看到,target_server的值被打印出來(lái)了。


清單8 自定義的配置文件
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd"><suite name="Custom suite">  <parameter name="target_server"  value="127.0.0.1"/>  <test verbose="6" name="Test for 1 classes" annotations="1.5">    <groups>      <run>        <include name="functional_test"/>      </run>    </groups>    <classes>      <class name="com.catherine.lab.testng.firstTest.FirstTestSample">      </class>    </classes>  </test></suite>

測試方法的參數可以是任意多個(gè),只要你通過(guò)配置文件傳入了正確的參數,那么測試方法中就可以使用這些參數了。不過(guò)需要注意的是,參數是有作用域的,比如參數可以在配置文件的suite和test之后定義,而如果兩個(gè)參數的名稱(chēng)一樣,test中定義的參數值有較高的優(yōu)先級。

testNG可以從多個(gè)線(xiàn)程中運行測試方法,只需要將配置文件中suite的parallel屬性設為true。線(xiàn)程的數目在thread-count中設置。如果兩個(gè)方法有依賴(lài)關(guān)系,那么他們將在一個(gè)線(xiàn)程中運行,除此之外,都可以在多個(gè)線(xiàn)程中并發(fā)的運行。

<suite name="My suite" parallel="true" thread-count="10">

除了以上介紹的特性以外,(請參閱"參考資料")

  • TestNG提供了注釋Factory,用來(lái)動(dòng)態(tài)生成測試方法的參數。
  • TestNG還提供了AntTask <testng>,可以從Ant腳本中調用testNG。
  • TestNG的可以調用JUnit的test cases。只需要配置文件中聲明
    <test name="Test1" junit="true">
    <classes ..>
  • TestNG還可以從程序中調用:
    TestNG testng = new TestNG();
    testng.setTestClasses(Class[] {});
    testng.run();

除了TestNG之外… 從上面的例子可以看出,TestNG這個(gè)單元測試框架的功能是很強大的,而且簡(jiǎn)單易學(xué)。開(kāi)發(fā)者只需要使用TestNG所提供的注釋和正確的配置文件,可以輕松地完成復雜的測試用例。

除了TestNG之外,JTiger也是一種基于J2SE5.0的單元測試框架,其中應用了大量J2SE5.0的新特性,比如注釋和靜態(tài)Import。和TestNG類(lèi)似, JTiger提供了大量?jì)冉ǖ淖⑨岊?lèi)型, 比如JTiger也使用注釋@Test標明測試方法, 使用注釋@Category表示這個(gè)測試方法屬于那一類(lèi),類(lèi)似于TestNG的@Test的groups屬性。和TestNG不同的是,JTiger并沒(méi)有使外部的配置文件。

總之,TestNG和JTiger都解決了JUnit3.x中存在的問(wèn)題,提供了大量?jì)?yōu)于JUnit3.x的特性。而JUnit也并沒(méi)有就此止步,即將發(fā)布的JUnit4.0有了根本性的變化,JUnit4.0也將變成基于注釋的測試系統。同樣也將提供大量的內建注釋類(lèi)型:比如@Test, @Before, @After等等。這些引入的注釋類(lèi)型,使得JUnit克服了以前的問(wèn)題,擁有了新的活力。Justine Lee在他的文章中,詳細地比較了這三種測試框架,請參閱"參考資料"。

選用何種測試框架,取決于很多的因素。雖然JUnit具有眾多的擁簇者,但是TestNG和JTiger的崛起也不可小覷的。應該說(shuō),TestNG是建立在JUnit3.x之上的,吸取了JUnit的優(yōu)點(diǎn),同時(shí)也擯棄和改正了JUnit的缺點(diǎn)。筆者曾經(jīng)在Eclipse中使用過(guò)JUnit3.x和TestNG,個(gè)人認為T(mén)estNG使用起來(lái)比JUnit3.x要更為方便。但是JUnit提供測試插件(plug-in)的功能,TestNG目前并沒(méi)有提供這種功能。不過(guò)我們有理由相信,在不久的將來(lái)TestNG會(huì )對于eclipse插件提供更為豐富的支持。本文通過(guò)對TestNG的介紹,希望能夠為大家在選擇測試框架的時(shí)候提供一個(gè)新的選擇。


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
追求代碼質(zhì)量: JUnit 4 與 TestNG 的對比
eclipse安裝TestNG
spring和testng的整合
TestNG
Eclipse快速上手指南之使用JUnit
實(shí)戰 TestNG 監聽(tīng)器
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久