我正在编写使用TemporaryFolder规则的JUnit4测试。它似乎与@Rule和@ClassRule都能很好地工作。Junit @Rule和@ClassRule有什么区别?为什么我应该使用一个而不是另一个?
发布于 2016-12-13 21:25:06
当一个类中有多个测试方法时,这种区别就变得很明显了。
一个@ClassRule在任何测试方法之前运行它的before()方法。然后运行所有测试方法,最后运行规则的after()方法。因此,如果一个类中有五个测试方法,before()和after()仍然只运行一次。
@ClassRule适用于静态方法,因此具有其固有的所有限制。
@Rule通过规则的apply()方法运行测试,该方法可以在运行目标方法之前和之后执行某些操作。如果您有五个测试方法,则规则的apply()将被调用五次,作为每个方法的包装器。
使用@ClassRule设置可供所有测试方法重用的内容,前提是可以在静态方法中实现这一点。
使用@Rule为每个测试方法设置需要创建新的或重置的内容。
发布于 2016-12-13 21:17:25
无法将@Rule设置为在@BeforeClass之前运行。
而@ClassRule必须在静态方法上。
发布于 2018-03-23 18:26:50
Ref:注释引用规则或返回它们的方法的静态字段。字段必须是公共的、静态的,并且是TestRule的子类型。方法必须是公共静态的,并且返回TestRule的子类型。
传递给TestRule的语句将运行任何BeforeClass方法,然后运行测试类的整个主体(如果是标准JUnit测试类,则运行所有包含的方法;如果是套件,则运行所有包含的类),最后运行所有AfterClass方法。
https://junit.org/junit4/javadoc/4.12/org/junit/ClassRule.html
https://stackoverflow.com/questions/41121778
复制相似问题