TestNG是否支持JUnit4的@Rule?

时间:2011-05-23 15:48:55

标签: testng junit4

TestNG有类似@Rule的内容吗?我在具体思考:

@Rule public TemporaryFolder folder = ...

甚至

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

我知道我可以使用setUp()tearDown()等效手动实现这些内容,但这些并不能让我使用@Rule方便。

2 个答案:

答案 0 :(得分:4)

规则非常容易模拟,例如使用超类:

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

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

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

如果扩展Base,将始终自动创建临时目录,然后将其删除。

这种方法优于规则的优点是规则始终是类范围的,而使用TestNG,您可以围绕方法,测试,类,组甚至套件实现它们。

答案 1 :(得分:0)

TestNG的

BeforeClass / AfterClass可以模拟JUnit的rule / ruleClass之类的内容,但是这些类无法复制的功能和效果如:重复,过滤等。

然而,TestNG提供的一些接口可用于模拟这些功能,例如: IAnnotationTransformerIMethodInterceptor