TestNG有类似@Rule
的内容吗?我在具体思考:
@Rule public TemporaryFolder folder = ...
甚至
@Rule public MethodRule globalTimeout = new Timeout(20);
我知道我可以使用setUp()
和tearDown()
等效手动实现这些内容,但这些并不能让我使用@Rule
方便。
答案 0 :(得分:4)
规则非常容易模拟,例如使用超类:
public void Base {
@BeforeMethod
public void createTempDir() { ... }
@AfterMethod
public void deleteTempDir() { ... }
}
public void MyTest extends Base {
@Test
...
}
如果扩展Base,将始终自动创建临时目录,然后将其删除。
这种方法优于规则的优点是规则始终是类范围的,而使用TestNG,您可以围绕方法,测试,类,组甚至套件实现它们。
答案 1 :(得分:0)
BeforeClass
/ AfterClass
可以模拟JUnit的rule
/ ruleClass
之类的内容,但是这些类无法复制的功能和效果如:重复,过滤等。
然而,TestNG提供的一些接口可用于模拟这些功能,例如: IAnnotationTransformer
,IMethodInterceptor
。