JUnit 5,将信息从测试 class 传递到扩展
JUnit 5, pass information from test class to extension
我正在尝试为 Junit5 编写一个类似于我为 Junit4 编写的扩展,但我无法掌握如何在新的(无状态)扩展系统中执行此操作。
以前版本的想法是用户可以将信息传递到扩展 class 中,从而改变它的行为方式。这是一个伪片段,显示了大致用于做什么:
public void MyTest {
// here I can define different behaviour for my extension
@Rule MyCustomRule rule = MyCustomRule.of(Foo.class).withPackage(Bar.class.getPackage).alsoUse(Cookies.class);
@Test
public void someTest() {
// some test code already affected by the @Rule
// plus, user has access to that class and can use it, say, retrieve additional information
rule.grabInfoAboutStuff();
}
}
现在,我知道如何操作 JUnit 5 扩展、使用什么生命周期等。但我不知道如何赋予测试编写者使用 JUnit5 修改我的扩展行为的能力。任何指点表示赞赏。
从 JUnit Jupiter 5.0.1 开始,不幸的是无法像在 JUnit 4 中那样以编程方式 将参数传递给 Extension
。
不过,我正在努力在 JUnit Jupiter 5.1 中添加此类支持。喜欢的可以关注以下问题:https://github.com/junit-team/junit5/issues/497
在此期间,将信息 传递给扩展程序的唯一方法是让扩展程序支持自定义注释并从那里提取用户提供的信息。例如,我允许用户在 Spring 框架的 @EnabledIf
注释中提供自定义 SpEL expression
,而我的 ExecutionCondition
扩展从使用反射的注释。
跟进来自 Sam 的(已接受的)答案,同时提到的错误已通过 junit 5.1 实现
- 使用@RegisterExtension
- 见https://junit.org/junit5/docs/current/user-guide/#extensions-registration-programmatic
我正在尝试为 Junit5 编写一个类似于我为 Junit4 编写的扩展,但我无法掌握如何在新的(无状态)扩展系统中执行此操作。
以前版本的想法是用户可以将信息传递到扩展 class 中,从而改变它的行为方式。这是一个伪片段,显示了大致用于做什么:
public void MyTest {
// here I can define different behaviour for my extension
@Rule MyCustomRule rule = MyCustomRule.of(Foo.class).withPackage(Bar.class.getPackage).alsoUse(Cookies.class);
@Test
public void someTest() {
// some test code already affected by the @Rule
// plus, user has access to that class and can use it, say, retrieve additional information
rule.grabInfoAboutStuff();
}
}
现在,我知道如何操作 JUnit 5 扩展、使用什么生命周期等。但我不知道如何赋予测试编写者使用 JUnit5 修改我的扩展行为的能力。任何指点表示赞赏。
从 JUnit Jupiter 5.0.1 开始,不幸的是无法像在 JUnit 4 中那样以编程方式 将参数传递给 Extension
。
不过,我正在努力在 JUnit Jupiter 5.1 中添加此类支持。喜欢的可以关注以下问题:https://github.com/junit-team/junit5/issues/497
在此期间,将信息 传递给扩展程序的唯一方法是让扩展程序支持自定义注释并从那里提取用户提供的信息。例如,我允许用户在 Spring 框架的 @EnabledIf
注释中提供自定义 SpEL expression
,而我的 ExecutionCondition
扩展从使用反射的注释。
跟进来自 Sam 的(已接受的)答案,同时提到的错误已通过 junit 5.1 实现
- 使用@RegisterExtension
- 见https://junit.org/junit5/docs/current/user-guide/#extensions-registration-programmatic