5

testng スイートを実行するときに無視する必要があるテスト クラスがいくつかあります。無視する必要があるクラスとメソッドに @Test(enabled=false) アノテーションを使用してみました。しかし、私の問題は、無視する必要があるクラスが抽象クラスを拡張し、基本クラスに @Test(enabled=false) アノテーションがある場合でも、この抽象クラスのテスト メソッドが無視されないことです。Junit では、基本クラスで @ignore を使用でき、拡張クラスのテスト メソッドはまったく呼び出されませんでした。この動作をtestngで再現するにはどうすればよいですか。

また、私のtestngスイートでは、クラスではなくパッケージでテストを実行しています。したがって、クラスをグループ化してグループを無視しようとしても、機能しません。 <test name="Test"> <groups> <run> <exclude name="testClass"/> </run> </groups>
<packages>

助けてください

4

2 に答える 2

6

これについて、Cedricからgoogle groups(Testng)からの返信がありました。参考までに下に貼り付けています

こんにちはポール、

あなたが見ているのは、アノテーションとデフォルト属性の継承がTestNGで相互作用する方法の不幸な結果であり、それをより良く機能させるためにバグが報告されています(私は便利なIDを持っていません)。

検討:

@Test(enabled = false)
public class C {
  @Test
  public void f()
}

TestNGがこれらのアノテーションを解決すると、メソッドの@Testが「有効」を指定していないことが検出されるため、デフォルト値が割り当てられます。例は次のようになります。

@Test(enabled = false)
public class C {
  @Test(enabled = true)
  public void f()
}

そして今、メソッドレベルで定義された値は、クラスで指定された値をオーバーライドします。

修正には、ブール値(ENABLED、DISABLED、INHERITED、デフォルト)の代わりに列挙型を使用する必要がありますが、これにより下位互換性が失われるため、これに新しいアノテーションを導入する必要があります(たとえば、「runStatus」など)。そのように)、そしてあなたの例は

@Test(runStatus = DISABLED)
public class C {
  @Test
  public void f()
}

これは意味がありますか?

-セドリック

于 2012-12-20T20:49:07.813 に答える
2

Cedric からの応答で述べたように、メソッド レベルの Test アノテーションはクラス レベルの Test アノテーションをオーバーライドします。したがって、クラスレベルで @Test(enabled=false) がある場合でも、テストメソッドは有効になります。私は同じ問題に直面していました。次のアプローチで修正されました。

最も簡単な解決策は、クラス レベルで @Test(enabled=false) を設定し、メソッド レベルから @Test アノテーションを削除することです。このような:

@Test(enabled = false)
public class C 
{

  public void f()

}
于 2016-10-24T19:26:33.530 に答える