我们希望在Quarkus项目中引入基于属性的测试,最好是使用jqwik。我们已经得到了许多使用junit木星的测试用例。我们还在测试用例中使用CDI。
让jqwik在一个小Quarkus示例项目中运行得很好,所以我想在一个大项目中编写一些属性。但是,jqwik正在运行,但是@Property、@Example和@Provider方法无法访问注入的bean (如下面的示例中所示:注入的bean为Null,TreeRepository )。ArbitrarySupplier子类也是如此。如果我用一个@Example替换@Test,那么引用测试就可以访问bean,并且测试通过了。
我的第一个猜测是,这与jqwik生命周期有关。我没有找到足够的信息,关于如何(以及是否?)jqwik与注入集成。我怎么才能让这个跑起来?
在这个示例中,我希望treeRepository是TreeRepository的一个实例(类是@ApplicationScoped)。相反,除了在带有@Test注释的方法中,它是空的。
@QuarkusTest
class MyTestClass {
@Inject
TreeRepository treeRepository;
@Test
void testSimple() {
final Collection<Tree> trees = this.treeRepository.getTrees() // works
assertThat(trees).isNotEmpty();
}
@Example
void testSimple() {
final Collection<Tree> trees = this.treeRepository.getTrees() // does not work
assertThat(trees).isNotEmpty();
}
@Property
void treesHaveLeaves(@Forall("tree") Tree tree) { // does not work
assertThat(tree.getLeaves()).isNotEmpty();
}
Arbitrary<Tree> tree() {
final Collection<Tree> trees = this.treeRepository.getTrees(); // does not work
return Arbitraries.of(trees);
}
}发布于 2022-11-10 12:55:48
有坏消息,也许还有一些好消息。
坏消息是:@QuarkusTest是专为JUnit木星制作的。木星和jqwik是JUnit平台的两个不同的测试引擎。不同引擎的生命周期并不组成,这就是为什么在执行jqwik属性或示例时不会自动注入treeRepository。
好消息是,为jqwik和Quarkus集成创建像@JqwikQuarkusTest这样的东西可能并不太困难。如果您想自己这么做,可以使用jqwik的Spring支持作为灵感或模板:https://github.com/jlink/jqwik-spring。或者在这里读到jqwik的钩子:https://jqwik.net/docs/current/user-guide.html#lifecycle-hooks,然后从头开始。
如果你觉得自己不能胜任这项任务,你可能会想请别人为你或你的公司做这件事。我很乐意帮忙。
https://stackoverflow.com/questions/74388233
复制相似问题