<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    TestNG測試帶參構造函數的類

    今天被同事問到一個問題,問題描述如下:
      一個測試類,只有一個帶參構造函數。在帶參構造函數上加@Test,同時加@Parameters注解從testng.xml中傳遞參數。為保證測試函數在帶參構造函數之后執行,所以測試方法前的@Test加了dependsOnMethods屬性,依賴于帶參構造函數。
      重現問題的示例代碼如下:
    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);
    }
    }
      輸出結果:
      根據輸出結果可知,錯誤原因是沒有找到stayOnServer()依賴的測試函數WebTest()。可能會疑問,不是有名稱為WebTest()的函數嗎,而且還用@Test注解了,為什么會提示找不到呢?
      這個錯誤,跟TestNG的執行原理有關。TestNG啟動之后,先調用構造函數創建所有的測試實例,然后才進行測試。因此,構造函數與測試函數的執行時機不一樣,構造函數在所有測試方法之前先執行,沒有必要再通過@Test的dependsOnMethods屬性使測試函數依賴于構造函數。
    .  構造函數沒必要用@Test注解(注解了也不會報錯),但是TestNG不會把它當做測試函數,它也不會和其他測試函數一起執行。可能習慣性地認為帶參構造函數前的@Parameters一定要和@Test一起使用,其實不是這樣的,@Parameters可以放的位置有如下兩種情況:
      1. 任何已經被@Test,@Factory或者Configuration annotation(@BeforeXXX/@AfterXXX)注解的函數。
      2. 測試類中至多一個構造函數前面。TestNG會調用該構造函數創建測試實例,并從testng.xml中獲得該構造函數需要的參數。
      可能你希望使用某個構造函數來創建測試實例,但是TestNG會根據自己的規則選擇構造函數。TestNG選擇構造函數的規則:
      1. 通常情況下,會選擇默認無參構造函數或者自己添加的無參構造函數。
      2. 如果有帶參構造函數,且被@Parameters注解,就會選擇該帶參構造函數。
      3. 如果同時有無參構造函數和帶參構造函數,且帶參構造函數沒有被@Parameters注解,選擇無參構造函數。
      4. 如果只有帶參構造函數,但是帶參構造函數沒有被@Parameters注解,執行測試函數時拋出org.testng.TestNGException。
      對于帶參構造函數的測試類,使用@Factory注解,不僅可以解決帶參構造函數沒有被@Parameters注解而導致的org.testng.TestNGException,而且還可以充分發揮TestNG參數化測試的優勢。以添加如下@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();
    }
      上面代碼會創建3個stayTime分別為10,20,30的測試實例。如果使用@Parameters注解,必須創建3個test分別將10,20,30從testng.xml傳入。因此,@Factory為帶參構造函數的類創建一系列有規律的測試實例提供了便利。

    posted on 2014-08-06 10:16 順其自然EVO 閱讀(298) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2014年8月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费av欧美国产在钱| 24小时免费直播在线观看| 久久亚洲国产欧洲精品一| 精品国产免费人成网站| a级亚洲片精品久久久久久久| 成人免费网站视频www| AV在线播放日韩亚洲欧| 成在人线av无码免费高潮水| 亚洲色偷偷综合亚洲AVYP| 国产精品成人69XXX免费视频| 国产亚洲美女精品久久久| 女同免费毛片在线播放| 亚洲Av熟妇高潮30p| 日本免费xxxx色视频| 中文字幕在线日亚洲9| 国产高清在线免费视频| 一级特级aaaa毛片免费观看| 亚洲综合av永久无码精品一区二区| a级精品九九九大片免费看 | 亚洲第一黄色网址| 国产精品高清免费网站 | 69堂人成无码免费视频果冻传媒| 亚洲一级毛片中文字幕| 国产jizzjizz视频免费看| 久久精品成人免费国产片小草| 亚洲国产精品久久66| 麻豆最新国产剧情AV原创免费| 亚洲欧洲专线一区| 亚洲日韩精品射精日| 久久久久久精品成人免费图片| 亚洲AV一区二区三区四区| 伊人亚洲综合青草青草久热| 国产成人免费高清激情明星| 色欲aⅴ亚洲情无码AV蜜桃| 亚洲精品无码不卡在线播HE| 免费看污成人午夜网站| 一级特黄aaa大片免费看| 久久精品亚洲一区二区三区浴池| 国产禁女女网站免费看| 免费视频一区二区| 国产亚洲高清在线精品不卡|