JUnit 5 中多个扩展的顺序

Bet*_*ide 6 java spring-boot junit5

如果我在 JUnit 5 中使用多个扩展,顺序是什么?理想情况下,@ExtendsWith注释的顺序是受到尊重的,但我找不到任何关于它的文档。

例子:

@ExtendWith({SpringExtension.class, InitH2.class})
public class VmRepositoryIntegrationTest {
  // Test implemenations
}
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中,我需要 Spring 在初始化数据库之前设置数据库连接。

Sla*_*law 8

来自JUnit 5 用户指南的 §5.2.1

...

多个扩展可以这样注册在一起:

@ExtendWith({ DatabaseExtension.class, WebServerExtension.class })
class MyFirstTests {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

作为替代方案,可以像这样单独注册多个扩展:

@ExtendWith(DatabaseExtension.class)
@ExtendWith(WebServerExtension.class)
class MySecondTests {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

延期登记令

通过声明方式注册的扩展@ExtendWith将按照它们在源代码中声明的顺序执行。例如,测试中都执行MyFirstTestsMySecondTests将被由扩展DatabaseExtensionWebServerExtension以完全相同的顺序