Junit @Rule和@ClassRule

Vik*_*ava 34 java junit rule

我正在编写JUnit4测试,其中我正在使用TemporaryFolder规则.似乎它对@Rule和@ClassRule都很好.Junit @Rule和@ClassRule有什么区别?我为什么要使用一个而不是另一个?

sli*_*lim 67

当一个类中有多个测试方法时,区别就变得清晰了.

A 在任何测试方法之前运行@ClassRulebefore()方法.然后运行所有测试方法,最后运行规则的after()方法.因此,如果一个类中有五个测试方法,before()并且after()每个测试方法仍然只运行一次.

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

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

使用@ClassRule设置的东西,可以通过所有的测试方法可以重复使用,如果你能做到这一点的静态方法.

使用@Rule设置一些需要被重新创建,或重置,每个测试方法.