TestNG公式ドキュメント中国語版(5)-テスト方法/クラスとグループ

7859 ワード

5-Test methods,Test classes and Test groups 5.1-Test groups TestNGは複雑なテスト方法のグループ化を許容する.メソッドがグループに属していることを示すだけでなく、グループに他のグループが含まれていることを指定できます.その後、TestNGは呼び出され、いくつかのパケットを含み、他のパケットを排除するように要求される.これにより、テストの最大弾力性をどのように区分するかが提供され、2つの異なるテストデバイスを実行するために再コンパイルする必要がない場合があります.例えば、少なくとも2種類のテスト*Check-in testsが非常に一般的に必要である.これらのテストは、新しいコードをコミットする前に実行されます.それらは典型的には高速で要求され、基礎機能が破壊されていないことを確認するだけである.    * Functional tests.これらのテストは、すべてのソフトウェア機能をカバーし、少なくとも1日間実行する必要があるが、理想的には連続的に実行する.代表的に、check-inテストは機能性テストのサブセットである.TestNGはこれを非常に直接的な方法で説明することを許可します.たとえば、完全なテストクラスが「functest」グループに属し、他の2つの方法がグループ「checkintest」に属していることを示すテストを構築できます.
public class Test1 {
  @Test(groups = { "functest", "checkintest" })
  public void testMethod1() {
  }

  @Test(groups = {"functest", "checkintest"} )
  public void testMethod2() {
  }

  @Test(groups = { "functest" })
  public void testMethod3() {
  }

}

TestNGを呼び出し、使用
<test name="Test1">
  <groups>
    <run>
      <include name="functest"/>
    </run>
  </groups>
  <classes>
    <class name="example1.Test1"/>
  </classes>
</test>

クラスで実行するすべてのテストメソッドはcheckintest呼び出しを使用するとtestMethod 1()とtestMethod 2()のみが実行されます.ここでは他の例から,今回は正規表現を用いる.Linuxで実行できないテスト方法があるとします.テストは同様です.
@Test
public class Test1 {
  @Test(groups = { "windows.checkintest" })
  public void testWindowsOnly() {
  }

  @Test(groups = {"linux.checkintest"} )
  public void testLinuxOnly() {
  }

  @Test(groups = { "windows.functest" )
  public void testWindowsToo() {
  }
}

次のtestngを使ってもいいです.xmlファイルはWindowsメソッドのみを起動します.
<test name="Test1">
  <groups>
    <run>
      <include name="windows.*"/>
    </run>
  </groups>

  <classes>
    <class name="example1.Test1"/>
  </classes>
</test>

注意:TestNGはwildmatsではなく正規表現を使用します.この違いに注意してください.Method groupsは、個別のメソッドを含むか除外することもできます.
<test name="Test1">
  <classes>
    <class name="example1.Test1">
      <methods>
        <include name=".*enabledTestMethod.*"/>
        <exclude name=".*brokenTestMethod.*"/>
      </methods>
     </class>
  </classes>
</test>

これは、再コンパイルしたくない場合に単独の方法を無効にする必要がある場合に便利ですが、このメカニズムをあまり使用することをお勧めしません.これはあなたのテストフレームワークを破壊する可能性がありますjavaコード(ラベルで使用されている正規表現があなたの方法に一致しない可能性があります)5.2-Groups of groups"functest"itself will contain the groups"windows"and"linux"while"checkintest will only contain"windows".Here is how you would define this in your property file:グループは他のグループを含むことができます.これらのグループは「MetaGroups.たとえば、「checkintest」と「functest」を含む「all」グループを定義したい場合があります.」functest"自身はグループ"windows"と"linux"を含み、"checkintest"は"windows"を含む.
 1 <test name="Regression1">
 2   <groups>
 3     <define name="functest">
 4       <include name="windows"/>
 5       <include name="linux"/>
 6     </define>
 7  
 8     <define name="all">
 9       <include name="functest"/>
10       <include name="checkintest"/>
11     </define>
12  
13     <run>
14       <include name="all"/>
15     </run>
16   </groups>
17  
18   <classes>
19     <class name="test.sample.Test1"/>
20   </classes>
21 </test>

5.3-ExclusionグループTestNG許容含むグループも除外グループも許容する.たとえば、最近の変更によって一時的に破壊されたテストで、修復する時間がない場合に便利です.いずれにしても、機能性テストをきれいに実行したいので、これらのテストが失効したいと思っていますが、再アクティブになっていることを覚えておいてください.この問題を簡単に解決する方法は、「broken」と呼ばれるグループを作成し、これらのテスト方法を帰属させることです.たとえば、上記の例では、testMethod 2()が破壊されたことを知っています.私はそれを閉じたいと思っています.
1 @Test(groups = {"checkintest", "broken"} )
2 public void testMethod2() {
3 }

今私がしたいのは、このグループを実行中に除外することだけです.
 1 <test name="Simple example">
 2   <groups>
 3     <run>
 4       <include name="checkintest"/>
 5       <exclude name="broken"/>
 6     </run>
 7   </groups>
 8  
 9   <classes>
10     <class name="example1.Test1"/>
11   </classes>
12 </test>

この方法では、破壊され、後続の修復を望むテストを記録しながら、きれいなテスト実行を得ることができます.注意:@Test [email protected]/After annotationsの「enabled」プロパティを使用して、個々のレベルでテストを閉じることもできます.5.4-Partialグループでは、クラスのレベルでグループを定義し、メソッドのレベルでグループを追加できます.
1 @Test(groups = { "checkin-test" })
2 public class All {
3 
4   @Test(groups = { "func-test" )
5   public void method1() { ... }
6 
7   public void method2() { ... }
8 }

このクラスではmethod 2()はグループ「checkin-test」に属し、クラスのレベルで定義されます.method 1()は「checkin-test」と「func-test」の両方に属する.
via: http://www.blogjava.net/aoxj