3

IntelliJ IDEA 9 で TestNG を使用する方法を学んでいます。

私が理解している限り、というグループにテストを配置する1つの方法は、nameそれに注釈を付けること@Test(group = "name")です。各テストの前にメソッドを実行するには、 で注釈を付け@BeforeMethodます。

私のテスト設定では、特定のグループでのみ各テストの前にメソッドを実行したいと考えています。したがってbeforeA、 group 内の各テストの前に実行されるAメソッド、各テストのbeforeB前に実行されるメソッドBなどがあります。

コード例:

public class TestExample
{
    @BeforeMethod(groups = "A")
    public void beforeA()
    {
        System.out.println("before A");
    }

    @BeforeMethod(groups = "B")
    public void beforeB()
    {
        System.out.println("before B");
    }

    @Test(groups = "A")
    public void A1()
    {
        System.out.println("test A1");
    }

    @Test(groups = "A")
    public void A2()
    {
        System.out.println("test A2");
    }

    @Test(groups = "B")
    public void B1()
    {
        System.out.println("test B1");
    }

    @Test(groups = "B")
    public void B2()
    {
        System.out.println("test B2");
    }
}

次のような出力が期待されます

before A
test A1
before A
test A2
before B
test B1
before B
test B2

しかし、私は次のようになります:

before A
before B
before A
before B
test A2
before A
before B
before A
before B
test B1

===============================================

test B2

===============================================
Custom suite
Total tests run: 4, Failures: 0, Skips: 0
===============================================

IntelliJ IDEA は、「グループ A は未定義です」または「グループ B は未定義です」というメッセージですべての注釈を強調表示しました。

私は何を間違っていますか?

4

4 に答える 4

19
  1. リストの順序が正しくありません。これは intelliJ のせいです。コマンドラインまたはmavenでテストを実行すると、順序が正しくなります。
  2. @BeforeMethod@AfterMethodグループで壊れているようです。
  3. IntelliJ は以前に使用したグループを記憶します。まだ記憶されていないグループを使用すると、「グループ X は未定義です」というメッセージが表示されます。未定義のグループにalt+を押すだけで覚えられます。Enter

資力 :

于 2010-08-30T18:04:24.623 に答える
3

Intellij に修正を依頼しました。問題を確認してください: http://youtrack.jetbrains.net/issue/IDEA-67653 JetBrains が修正するように投票する必要があります

于 2011-04-06T19:20:53.313 に答える
3

@BeforeMethod(groups =...)グループ内のすべてのメソッドの前に実行することは想定されていません。クラス内のすべてのメソッドの前に実行されます。違いは、特定のグループに属するだけで、それ以上のものではないということです。ドキュメントを参照

于 2013-07-05T09:51:00.150 に答える
1

TEH EMPRAH で述べたように、@BeforeMethod は、同じグループに属するすべてのメソッドの前に実行されるとは想定されていません。

これを行うには、testng.xml を正しく構成する必要があります。期待される出力の場合、次のようになります

<suite....>
 <test name="A">
  <groups>
    <run>
   <include name="A"/>
    </run>
  </groups>
  <classes>
   <class name="...TestExample"/>
  </classes>
 </test>
 <test name="B">
  <groups>
    <run>
   <include name="B"/>
    </run>
  </groups>
  <classes>
   <class name="...TestExample"/>
  </classes>
 </test>
</suite>
于 2014-02-11T15:10:15.160 に答える