junit TestInstance(PER_CLASS)`如何允许`@BeforeAll`方法不是静态的?

xxhby3vn  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(137)

我读过documentation,没有必要解释,如何在BeforeAll方法中访问非静态字段等。我正在寻找一个答案-为什么TestInstance(PER_CLASS)在BeforeAll方法中解决静态方法?换句话说,它内部是如何工作的?官方文件中没有解释,只是说
@BeforeAll方法必须具有void返回类型,不能是私有的,并且默认情况下必须是静态的。因此,在@Nested测试类中不支持@BeforeAll方法,也不支持将其作为接口默认方法,除非测试类使用@TestInstance(B. P.PER_CLASS)进行注解
就这样它不清楚,不明显。假设,我不明白的东西。

jslywgbw

jslywgbw1#

正如PER_CLASS的Javadoc中所述:
使用此模式时,每个测试类将创建一个新的测试示例。
换句话说,当使用测试示例PER_CLASS语义时,有一个测试类的示例被重用于该类中所有测试方法的调用。
为了做到这一点,JUnit必须提前示例化单个测试示例(在调用@BeforeAll方法之前)。因此,由于JUnit已经有了类的示例,@BeforeAll方法不必是static:JUnit将在该单个示例上调用@BeforeAll方法。这同样适用于@AfterAll方法。

相关问题