我正在尝试为Junit5编写一个类似于Junit4的扩展,但是我没有意识到在新的(无状态)扩展系统中如何做到这一点.
之前版本中的想法是用户可以将信息传递到扩展类,从而改变其行为方式.这是一个伪代码段,大致显示了以前的用法:
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 Framework中的@EnabledIf
注释中提供自定义SpEL表达式,而我的ExecutionCondition扩展使用反射从注释中提取表达式.