web-dev-qa-db-ja.com

TestNGはJUnit4の@Ruleのようなものをサポートしていますか?

TestNGには_@Rule_のようなものがありますか?私は特に考えています:

_@Rule public TemporaryFolder folder = ...
_

あるいは

_@Rule public MethodRule globalTimeout = new Timeout(20);
_

setUp()およびtearDown()と同等のものを使用してこれらを手動で実装できることは承知していますが、_@Rule_を使用して得られる便利さはありません。

36
Francisco

ルールは、たとえばスーパークラスを使用すると、非常に簡単にエミュレートできます。

public void Base {
  @BeforeMethod
  public void createTempDir() { ... }

  @AfterMethod
  public void deleteTempDir() { ... }
}

public void MyTest extends Base {
  @Test
  ...
}

Baseを拡張すると、一時ディレクトリは常に自動的に作成されてから削除されます。

ルールに対するこのアプローチの利点は、ルールが常にクラススコープであるのに対し、TestNGを使用すると、メソッド、テスト、クラス、グループ、さらにはスイートの周りにルールを実装できることです。

5
Cedric Beust

TestNGのBeforeClass/AfterClassは、JUnitのrule/ruleClassのようなものをシミュレートできますが、これらのクラスでは複製できない関数や効果がいくつかあります。として:繰り返し、フィルターなど。

ただし、代わりにこれらの関数をシミュレートするために使用できるTestNGによって提供されるいくつかのインターフェイスがあります。 IAnnotationTransformerIMethodInterceptor

0
franklin