2.10、测试实例得生命周期

为了允许独立测试方法能够独立得执行,并避免因为可变得测试实例状态而造成得副作用,JUnit在执行每个测试方法之前都会创建一个新的测试类得实例。在JUnit Jupiter跟之前所有得Junit版本相似,其默认得生命周期是per-method

请注意,即使使用per-method这种测试生命周期,通过条件测试而禁止某种测试得测试方法依然会被创建测试实例。

如果你想让JUnit Jupiter在同一个测试实例中执行所有得测试方法,就要在你的测试类中标注@TestInstance(Lifecycle.PER_CLASS)。当使用这种模式得时候,在每个测试类之前都会创建一个测试实例。因此,如果你的测试方法依赖与实例变量状态得话,你也许需要在@BeforeEach@AfterEach方法内重设置一下这个状态。

per-class模式比默认得per-method模式有更多额外得好处。具体得,使用per-class模式可以在非静态方法和接口得默认方法上使用@BeforeAll@AfterAllper-class模式下,还可以在@Nested测试方法中使用@BeforeAll@AfterAll

如果你使用Kotlin语言编写测试,你也许可以通过选择per-class模式,来找到更简单得方法来实现@BeforeAll@AfterAll方法。

2.10.1、改变默认得测试实例生命周期

如果测试类和测试接口上没有使用@TestInstanceJUnit Jupiter就会使用默认得生命周期模式。标准得默认模式是PER_METHOD;然而,也可以在整个测试计划中改变这个默认模式。要更改默认的测试实例生命周期模式,将junit.jupiter.testinstance.lifecycle.default配置参数设置为TestInstance.Lifecycle中定义的enum常量的名称,可忽略大小写。这可以作为JVM系统属性提供,也可以作为传递给启动程序的LauncherDiscoveryRequest中的配置参数提供,或者通过JUnit平台配置文件提供。

比如,你可以通过下面系统变量来设置默认测试生命周期模式为Lifecycle.PER_CLASS

-Djunit.jupiter.testinstance.lifecycle.default=per_class

注意,通过JUnit Platform配置文件设置默认得测试生命周期更加具有健壮性。因为,配置文件可以随项目一起检入版本控制系统,因此可以在ide和构建软件中使用。

为了通过JUnit Platform配置文件来设置默认得测试生命周期模式为Lifecycle.PER_CLASS,你需要创建一个名称为junit-platform.properties,并放在class path得根目录下,比如:src/test/resources。并在文件中输入:

junit.jupiter.testinstance.lifecycle.default = per_class

如果不一致地应用默认测试实例生命周期模式,则可能导致不可预测的结果和脆弱的构建。比如,你使用per-class来构建,但在IDE中使用per-method来测试,这样在构建服务器上就很难debug找到错误。因此,这里建议使用JUnit Platform配置文件来配置,而不是通过JVM系统属性来配置。

results matching ""

    No results matching ""