Поддерживает ли TestNG что-то вроде JUnit4 @Rule?
Есть ли у TestNG что-то вроде @Rule
? Я думаю конкретно о:
@Rule public TemporaryFolder folder = ...
Или даже
@Rule public MethodRule globalTimeout = new Timeout(20);
Я знаю, что я могу вручную реализовать эти вещи, используя эквиваленты setUp()
и tearDown()
, но это не дает мне удобство, которое я получаю с помощью @Rule
.
Ответы
Ответ 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
.