我读过documentation,没有必要解释,如何在BeforeAll方法中访问非静态字段等。我正在寻找一个答案-为什么TestInstance(PER_CLASS)在BeforeAll方法中解决静态方法?换句话说,它内部是如何工作的?官方文件中没有解释,只是说
@BeforeAll方法必须具有void返回类型,不能是私有的,并且默认情况下必须是静态的。因此,在@Nested测试类中不支持@BeforeAll方法,也不支持将其作为接口默认方法,除非测试类使用@TestInstance(B. P.PER_CLASS)进行注解
就这样它不清楚,不明显。假设,我不明白的东西。
1条答案
按热度按时间jslywgbw1#
正如
PER_CLASS
的Javadoc中所述:使用此模式时,每个测试类将创建一个新的测试示例。
换句话说,当使用测试示例
PER_CLASS
语义时,有一个测试类的示例被重用于该类中所有测试方法的调用。为了做到这一点,JUnit必须提前示例化单个测试示例(在调用
@BeforeAll
方法之前)。因此,由于JUnit已经有了类的示例,@BeforeAll
方法不必是static
:JUnit将在该单个示例上调用@BeforeAll
方法。这同样适用于@AfterAll
方法。