3

我正在尝试为 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 修改我的扩展行为的能力。任何指针表示赞赏。

4

2 回答 2

6

从 JUnit Jupiter 5.0.1 开始,遗憾的是无法像 JUnit 4 中的规则那样以Extension 编程方式将参数传递给一个。

但是,我正在努力在 JUnit Jupiter 5.1 中添加此类支持。如果您愿意,可以关注以下问题:https ://github.com/junit-team/junit5/issues/497

在此期间,将信息传递给扩展的唯一方法是让扩展支持自定义注释并从那里提取用户提供的信息。例如,我允许用户在 Spring Frameworkexpression的注解中提供自定义 SpEL,我的扩展使用反射从注解中提取。@EnabledIfExecutionConditionexpression

于 2017-10-13T16:32:32.357 回答
1

跟进 Sam 的(已接受)答案,与此同时,所提到的错误已用 junit 5.1 实现

于 2018-12-29T13:39:45.750 回答