junit5 给出扩展之间的依赖关系
junit5 give dependencies between extension
我刚刚开始编写一些 junit5 测试和扩展。
我很快就找到了我认为的问题:我如何告诉 junit5 ExtensionB
需要 ExtensionA
存在?
例如,我有一个 'base' 扩展 ExtensionA
,它启动一个数据库并进行一些初始化,这足以进行一些测试。
我也有 ExtensionB
'requires' 由 ExtensionA
完成的一些工作,主要是从商店获取一些对象,然后解析一些参数。
显然,每当我需要分机 B 时,我也需要分机 A 存在。有没有办法强制这样做?我试过用 @ExtendWith(A.class)
class ExtensionB
进行注释,但这似乎没有效果。
有什么方法可以实现我所需要的吗?
或者我只是以错误的方式使用了 junit5,应该只有一个扩展可以为我做所有事情?
Jupiter 扩展是无状态的,因此声明彼此不依赖。
想拥有A和B的特色吗?创建从 A 和 B 借用代码的扩展 C。
话虽如此,扩展可以通过扩展存储与自己和其他扩展通信:https://junit.org/junit5/docs/current/user-guide/#extensions-keeping-state
声明一个 composed annotation 以可重用的方式组合多个注释:
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@ExtendWith({ DatabaseExtension.class, WebServerExtension.class })
public @interface DatabaseAndWebServerExtension {}
扩展按声明的顺序注册。
然后您可以使用此注释代替两个单独的注释:
@DatabaseAndWebServerExtension
public class MyDbTest {}
请参阅《JUnit 5 用户指南》中关于 declarative extension registration 的部分以了解确切的语义。
我刚刚开始编写一些 junit5 测试和扩展。
我很快就找到了我认为的问题:我如何告诉 junit5 ExtensionB
需要 ExtensionA
存在?
例如,我有一个 'base' 扩展 ExtensionA
,它启动一个数据库并进行一些初始化,这足以进行一些测试。
我也有 ExtensionB
'requires' 由 ExtensionA
完成的一些工作,主要是从商店获取一些对象,然后解析一些参数。
显然,每当我需要分机 B 时,我也需要分机 A 存在。有没有办法强制这样做?我试过用 @ExtendWith(A.class)
class ExtensionB
进行注释,但这似乎没有效果。
有什么方法可以实现我所需要的吗?
或者我只是以错误的方式使用了 junit5,应该只有一个扩展可以为我做所有事情?
Jupiter 扩展是无状态的,因此声明彼此不依赖。
想拥有A和B的特色吗?创建从 A 和 B 借用代码的扩展 C。
话虽如此,扩展可以通过扩展存储与自己和其他扩展通信:https://junit.org/junit5/docs/current/user-guide/#extensions-keeping-state
声明一个 composed annotation 以可重用的方式组合多个注释:
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@ExtendWith({ DatabaseExtension.class, WebServerExtension.class })
public @interface DatabaseAndWebServerExtension {}
扩展按声明的顺序注册。
然后您可以使用此注释代替两个单独的注释:
@DatabaseAndWebServerExtension
public class MyDbTest {}
请参阅《JUnit 5 用户指南》中关于 declarative extension registration 的部分以了解确切的语义。