junit5 给出扩展之间的依赖关系

al3*_*l3c 7 junit5 junit5-extension-model

我刚刚开始编写一些 junit5 测试和扩展。

我很快就遇到了我认为的问题:我如何告诉 junit5ExtensionB需要ExtensionA在场?

例如,我有一个“基本”扩展ExtensionA,它启动数据库并进行一些初始化,这对于某些测试来说已经足够了。

我还ExtensionB“需要”完成一些工作ExtensionA,主要是从商店获取一些对象,然后解析一些参数。

显然,每当我想要扩展 BI 时,也需要扩展 A 存在。有办法强制吗?我尝试过用@ExtendWith(A.class)类进行注释ExtensionB,但这似乎没有效果。

有办法实现我所需要的吗?

或者我只是以错误的方式使用 junit5,应该只使用一个扩展来为我做所有事情?

mic*_*hid 4

声明一个组合注释以可重用的方式组合多个注释:

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@ExtendWith({ DatabaseExtension.class,  WebServerExtension.class })  
public @interface DatabaseAndWebServerExtension {}
Run Code Online (Sandbox Code Playgroud)

扩展按照声明的顺序进行注册。

然后,您可以使用此注释而不是两个单独的注释:

@DatabaseAndWebServerExtension
public class MyDbTest {}
Run Code Online (Sandbox Code Playgroud)

有关确切语义,请参阅《JUnit 5 用户指南》中有关声明性扩展注册的部分。