Подтвердить что ты не робот

Поддерживает ли TestNG что-то вроде JUnit4 @Rule?

Есть ли у TestNG что-то вроде @Rule? Я думаю конкретно о:

@Rule public TemporaryFolder folder = ...

Или даже

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

Я знаю, что я могу вручную реализовать эти вещи, используя эквиваленты setUp() и tearDown(), но это не дает мне удобство, которое я получаю с помощью @Rule.

4b9b3361

Ответ 1

Правила довольно легко эмулировать, например, с помощью суперклассов:

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

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

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

Если вы расширяете базу, временный каталог всегда будет автоматически создан, а затем удален.

Преимущество такого подхода к правилам заключается в том, что правила всегда относятся к классам, а с помощью TestNG вы можете реализовать их вокруг методов, тестов, классов, групп и даже наборов.

Ответ 2

BeforeClass/AfterClass TestNG может имитировать что-то вроде rule/ruleClass JUnit, но есть некоторые функции и эффекты, которые эти классы не могут реплицировать, например: repeat, filter и т.д.

Однако существуют некоторые интерфейсы, предоставляемые TestNG, которые могут использоваться для имитации этих функций, например, IAnnotationTransformer, IMethodInterceptor.