Junit @Rule 和@ClassRule
Junit @Rule and @ClassRule
我正在编写 JUnit4 测试,其中我使用了 TemporaryFolder 规则。它似乎适用于@Rule 和@ClassRule。 Junit @Rule 和@ClassRule 有什么区别?为什么我应该使用一个而不是另一个?
@Rule 不能在@BeforeClass 之前设置为 运行。
虽然@ClassRule 必须在静态方法上。
当您在 class 中有多个测试方法时,区别就变得很明显了。
A @ClassRule
在任何测试方法之前都有其 before()
方法 运行。然后所有的测试方法都是运行,最后是规则的after()
方法。因此,如果您在 class 中有五个测试方法,before()
和 after()
仍然只会得到 运行 一次。
@ClassRule
适用于静态方法,因此具有所有固有的限制。
A @Rule
通过规则的 apply()
方法使测试成为 运行,它可以在目标方法 运行 之前和之后做一些事情。如果您有五个测试方法,则规则的 apply()
将被调用五次,作为每个方法的包装器。
使用 @ClassRule
设置可以被所有测试方法重用的东西,如果你可以在静态方法中实现的话。
使用@Rule
设置需要为每个测试方法创建新的或重置的内容。
Ref:注释引用规则或方法的静态字段 return 它们。字段必须是 public、静态的并且是 TestRule 的子类型。方法必须是 public 静态的,并且 return 是 TestRule 的子类型。
传递给 TestRule 的语句将 运行 任何 BeforeClass 方法,然后是测试的整个主体 class(所有包含的方法,如果它是标准 JUnit 测试 class ,或全部包含 classes,如果它是套件),最后是任何 AfterClass 方法。
https://junit.org/junit4/javadoc/4.12/org/junit/ClassRule.html
我正在编写 JUnit4 测试,其中我使用了 TemporaryFolder 规则。它似乎适用于@Rule 和@ClassRule。 Junit @Rule 和@ClassRule 有什么区别?为什么我应该使用一个而不是另一个?
@Rule 不能在@BeforeClass 之前设置为 运行。
虽然@ClassRule 必须在静态方法上。
当您在 class 中有多个测试方法时,区别就变得很明显了。
A @ClassRule
在任何测试方法之前都有其 before()
方法 运行。然后所有的测试方法都是运行,最后是规则的after()
方法。因此,如果您在 class 中有五个测试方法,before()
和 after()
仍然只会得到 运行 一次。
@ClassRule
适用于静态方法,因此具有所有固有的限制。
A @Rule
通过规则的 apply()
方法使测试成为 运行,它可以在目标方法 运行 之前和之后做一些事情。如果您有五个测试方法,则规则的 apply()
将被调用五次,作为每个方法的包装器。
使用 @ClassRule
设置可以被所有测试方法重用的东西,如果你可以在静态方法中实现的话。
使用@Rule
设置需要为每个测试方法创建新的或重置的内容。
Ref:注释引用规则或方法的静态字段 return 它们。字段必须是 public、静态的并且是 TestRule 的子类型。方法必须是 public 静态的,并且 return 是 TestRule 的子类型。
传递给 TestRule 的语句将 运行 任何 BeforeClass 方法,然后是测试的整个主体 class(所有包含的方法,如果它是标准 JUnit 测试 class ,或全部包含 classes,如果它是套件),最后是任何 AfterClass 方法。
https://junit.org/junit4/javadoc/4.12/org/junit/ClassRule.html