【发布时间】:2017-10-08 18:44:02
【问题描述】:
使用 JUnit 4,可以使用运行器来控制测试实例的生命周期。例如,我曾经实现 BlockJUnit4ClassRunner 的方法 createTest() 来微调实例创建(在我的例子中,使用 Weld 来检索 CDI 就绪实例)。
对于 JUnit 5,extensions 应该替换跑步者和规则。然而,我找不到像使用 JUnit 4 那样创建测试实例的方法。
有没有办法告诉 JUnit Jupiter 如何在不使用动态测试的情况下创建我的测试实例(例如,使用 Weld 容器)?
这是我现在在 JUnit 4 中所做的,并且希望能够在 Jupiter 中做的事情:
public class ContainerRunner extends BlockJUnit4ClassRunner {
private WeldContainer container;
...
@Override
public Object createTest() {
return container.select(this.getTestClass().getJavaClass()).get();
}
}
后来:
@RunWith(ContainerRunner.class)
@Singleton
public class ContainedTest {
@Inject
private Logger logger; // this works
@Test
public void testSomething() {
...
}
}
感谢您提供任何见解。
【问题讨论】:
-
目前不可能。已经有一个未解决的问题:github.com/junit-team/junit5/issues/672。但是,它不会在下一个版本 (5.1) 中发布。
-
谢谢@eee,我订阅了这个问题。同时,我坚持使用旧的优秀 JUnit 4。
-
如果你想和junit5一起使用weld,你可以看看:github.com/1and1/ejb-cdi-unit#junit5
标签: java junit junit5 junit-jupiter