posts - 32,comments - 75,trackbacks - 0

          3.         TestNG 的靈魂

          配置文件(testng.xml

          Junit中要定義測試任務是要寫TestSuit的,居然要寫硬編碼,而TestNG全部寫在testng.xml(名字可以自定義的)中的,然后可以通過ant來調用。

          <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

          <suite name="my suite">

          <test name="test1">

                 <groups>

                 <run name="group1">

                 </run>

                 </groups>

          <classes>

          <class name="ClassA"  />

          </classes>

          </test>

          <test name="test2"  >

                 <groups>

                 <run name="group2">

                 </run>

                 </groups>

          <classes>

          <class name="ClassB"/>

          <class name="ClassC"/>

          </classes>

          </test>

          </suite>

          上面包含了配置文件的基本的主干,一個配置文件只有一個Suite,基本上一個項目寫一個配置文件就可以了,當然如果你的項目足夠大,可能需要幾個配置文件。測試是按照從大到小的順序進行的,先執行suitetestclass,其中的groupclass是平級的,在講group的時候再詳細的解釋。有了這個文件,我們就可以很清楚的理解@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;

          從字面意思可以看出方法的執行順序,唯一的疑惑是執行的次數,官方的文檔的解釋是相當讓人疑惑的,好在我們可以自己測試,beforeTestMethod是當類中任何方法調用都要執行的,beforeTestbeforeTestClass在一個Test中是只執行一次的(沒試過把2個相同的類寫到一個Test里面),而beforeSuite在一個配置文件中只執行一次。上面都沒有考慮分組的情況,分組會更加的復雜,似乎靈活過頭了,但是考慮到項目的復雜性,每個測試方法的初始化都可能不同,現在我們做的項目要求每天要將單元測試寫進daily buildbuild文件里面自動執行,似乎只有用TestNG這樣靈活的配置才能達到。

           

          4.         分組

          將一個測試方法或者配置方法分組是很容易的。

          @Configuration(beforeTestClass=truegroups=“group1)

          @Test(groups=”group1”)

          只要象上面寫就可以了,名字隨便取,而且不需要預先定義。

          我們在一個類做2個組,看看效果

          @Configuration(beforeTestClass=truegroups=“group1)

          Public void C1(){}

          @Test(groups=”group1”)

          Public void T1(){}

          @Configuration(beforeTestClass=truegroups=“group2)

          Public void C2(){}

          @Test(groups=”group2”)

          Public void T2(){}

          只選group1

          …………………

                 <groups>

                 <run name="group1">

                 </run>

                 </groups>

          …………

                 執行C1        T1

           

          只選group2

          …………………

                 <groups>

                 <run name="group2">

                 </run>

                 </groups>

          …………

          執行C2        T2

           

          2個都選

          …………………

                 <groups>

          <run name="group1">

                 <run name="group2">

                 </run>

                 </groups>

          …………

          我最先以為的順序是C1        T1       C2        T2  A

          然而實際上是  C1        C2        T1        C1        C2        T2 B

          要想達到(A)的效果,只能把2group分開了放在不同的Test里面,其實只要知道一點,TestNG是先找Class,然后才去找Group的。

          posted on 2005-12-14 14:25 fanta 閱讀(1638) 評論(1)  編輯  收藏 所屬分類: Java

          FeedBack:
          # re: TestNG 與 Junit的比較(二)
          2005-12-15 09:15 | esmiles
          繼續觀注.原來對TestNG并沒有在意.  回復  更多評論
            
          主站蜘蛛池模板: 民县| 萨嘎县| 鸡泽县| 新平| 万安县| 盐亭县| 青田县| 丰顺县| 延庆县| 娱乐| 河曲县| 永吉县| 岱山县| 芜湖市| 五常市| 西城区| 越西县| 永康市| 彭泽县| 金湖县| 化隆| 云梦县| 上杭县| 武清区| 会同县| 庆安县| 乐业县| 财经| 安丘市| 高阳县| 遂川县| 安岳县| 舒兰市| 南城县| 巴南区| 西安市| 客服| 麻阳| 清徐县| 镇宁| 绿春县|