日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TestNG测试带参构造函数的类

發(fā)布時間:2025/3/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TestNG测试带参构造函数的类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
今天被同事問到一個問題,問題描述如下: 一個測試類,只有一個帶參構(gòu)造函數(shù)。在帶參構(gòu)造函數(shù)上加@Test,同時加@Parameters注解從testng.xml中傳遞參數(shù)。為保證測試函數(shù)在帶參構(gòu)造函數(shù)之后執(zhí)行,所以測試方法前的@Test加了dependsOnMethods屬性,依賴于帶參構(gòu)造函數(shù)。 重現(xiàn)問題的示例代碼如下:
package com.ibm.testng.test; import org.testng.annotations.Parameters; import org.testng.annotations.Test; public class WebTest { //Times staying on the?server private int stayTime; //Constructor with params @Test @Parameters({"stayTime"}) public WebTest(int stayTime) { System.out.println("Constructor with parameter!"); this.stayTime = stayTime; } @Test(dependsOnMethods="WebTest") public void stayOnServer() { System.out.println("The times staying on server: " + stayTime); } }
輸出結(jié)果: 根據(jù)輸出結(jié)果可知,錯誤原因是沒有找到stayOnServer()依賴的測試函數(shù)WebTest()。可能會疑問,不是有名稱為WebTest()的函數(shù)嗎,而且還用@Test注解了,為什么會提示找不到呢? 這個錯誤,跟TestNG的執(zhí)行原理有關(guān)。TestNG啟動之后,先調(diào)用構(gòu)造函數(shù)創(chuàng)建所有的測試實例,然后才進行測試。因此,構(gòu)造函數(shù)與測試函數(shù)的執(zhí)行時機不一樣,構(gòu)造函數(shù)在所有測試方法之前先執(zhí)行,沒有必要再通過@Test的dependsOnMethods屬性使測試函數(shù)依賴于構(gòu)造函數(shù)。
.  構(gòu)造函數(shù)沒必要用@Test注解(注解了也不會報錯),但是TestNG不會把它當(dāng)做測試函數(shù),它也不會和其他測試函數(shù)一起執(zhí)行。可能習(xí)慣性地認(rèn)為帶參構(gòu)造函數(shù)前的@Parameters一定要和@Test一起使用,其實不是這樣的,@Parameters可以放的位置有如下兩種情況: 1. 任何已經(jīng)被@Test,@Factory或者Configuration annotation(@BeforeXXX/@AfterXXX)注解的函數(shù)。 2. 測試類中至多一個構(gòu)造函數(shù)前面。TestNG會調(diào)用該構(gòu)造函數(shù)創(chuàng)建測試實例,并從testng.xml中獲得該構(gòu)造函數(shù)需要的參數(shù)。 可能你希望使用某個構(gòu)造函數(shù)來創(chuàng)建測試實例,但是TestNG會根據(jù)自己的規(guī)則選擇構(gòu)造函數(shù)。TestNG選擇構(gòu)造函數(shù)的規(guī)則: 1. 通常情況下,會選擇默認(rèn)無參構(gòu)造函數(shù)或者自己添加的無參構(gòu)造函數(shù)。 2. 如果有帶參構(gòu)造函數(shù),且被@Parameters注解,就會選擇該帶參構(gòu)造函數(shù)。 3. 如果同時有無參構(gòu)造函數(shù)和帶參構(gòu)造函數(shù),且?guī)?gòu)造函數(shù)沒有被@Parameters注解,選擇無參構(gòu)造函數(shù)。 4. 如果只有帶參構(gòu)造函數(shù),但是帶參構(gòu)造函數(shù)沒有被@Parameters注解,執(zhí)行測試函數(shù)時拋出org.testng.TestNGException。 對于帶參構(gòu)造函數(shù)的測試類,使用@Factory注解,不僅可以解決帶參構(gòu)造函數(shù)沒有被@Parameters注解而導(dǎo)致的org.testng.TestNGException,而且還可以充分發(fā)揮TestNG參數(shù)化測試的優(yōu)勢。以添加如下@Factory注解的代碼為例:
@Factory public static Object[] create() { System.out.println("Create test objects!"); List<WebTest> objectList = new ArrayList<WebTest>(); for(int i=1; i<4; i++) { objectList.add(new WebTest(i*10)); } return objectList.toArray(); }
上面代碼會創(chuàng)建3個stayTime分別為10,20,30的測試實例。如果使用@Parameters注解,必須創(chuàng)建3個test分別將10,20,30從testng.xml傳入。因此,@Factory為帶參構(gòu)造函數(shù)的類創(chuàng)建一系列有規(guī)律的測試實例提供了便利。

最新內(nèi)容請見作者的GitHub頁:http://qaseven.github.io/

總結(jié)

以上是生活随笔為你收集整理的TestNG测试带参构造函数的类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。