2016-12-13 58 views
13

我在写我使用TemporaryFolder规则的JUnit4测试。它似乎与@Rule和@ClassRule都可以正常工作。 Junit @Rule和@ClassRule有什么区别?为什么我应该使用一个而不是另一个?Junit @规则和@ClassRule

回答

23

当你在一个类中有多个测试方法时,区分就变得很清楚了。

A @ClassRule在其中任何测试方法之前都运行其before()方法。然后运行所有的测试方法,最后是规则的方法after()。因此,如果您在班级中有五种测试方法,则before()after()仍然每次只能运行一次。

@ClassRule适用于静态方法,因此具有固有的所有限制。

A @Rule导致通过规则的apply()方法运行测试,该方法可以在运行目标方法之前和之后执行任何操作。如果您有五种测试方法,则将规则的apply()称为五次,作为每种方法的包装。

使用@ClassRule来设置一些可以被所有测试方法重用的东西,如果您可以在静态方法中实现这一点的话。

使用@Rule可以为每种测试方法设置需要重新创建或重置的内容。

1

@Rule不能设置为在@BeforeClass之前运行。

虽然@ClassRule必须是静态方法。