我正在尝试为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修改我的扩展行为。任何指针都赞赏。
答案 0 :(得分:6)
从JUnit Jupiter 5.0.1开始,遗憾的是无法以编程方式将参数传递给Extension
,就像JUnit 4中的规则一样。
但是,我正在努力在JUnit Jupiter 5.1中添加这样的支持。如果您愿意,可以按照以下问题进行操作:https://github.com/junit-team/junit5/issues/497
在此期间,将信息传递给扩展程序的唯一方法是扩展程序支持自定义注释并从那里提取用户提供的信息。例如,我允许用户在Spring Framework的@EnabledIf
注释中提供自定义SpEL expression
,我的ExecutionCondition
扩展名使用反射从注释中提取expression
。
答案 1 :(得分:0)
跟进Sam的(可接受的)答案,与此同时,所引用的bug已通过junit 5.1实现。