首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Quarkus测试中激活jqwik时,Inject返回NULL。

在Quarkus测试中激活jqwik时,Inject返回NULL。
EN

Stack Overflow用户
提问于 2022-11-10 11:25:58
回答 1查看 26关注 0票数 0

我们希望在Quarkus项目中引入基于属性的测试,最好是使用jqwik。我们已经得到了许多使用junit木星的测试用例。我们还在测试用例中使用CDI。

让jqwik在一个小Quarkus示例项目中运行得很好,所以我想在一个大项目中编写一些属性。但是,jqwik正在运行,但是@Property@Example@Provider方法无法访问注入的bean (如下面的示例中所示:注入的bean为Null,TreeRepository )。ArbitrarySupplier子类也是如此。如果我用一个@Example替换@Test,那么引用测试就可以访问bean,并且测试通过了。

我的第一个猜测是,这与jqwik生命周期有关。我没有找到足够的信息,关于如何(以及是否?)jqwik与注入集成。我怎么才能让这个跑起来?

在这个示例中,我希望treeRepository是TreeRepository的一个实例(类是@ApplicationScoped)。相反,除了在带有@Test注释的方法中,它是空的。

代码语言:javascript
复制
@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);
  }
}
EN

回答 1

Stack Overflow用户

发布于 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,然后从头开始。

如果你觉得自己不能胜任这项任务,你可能会想请别人为你或你的公司做这件事。我很乐意帮忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74388233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档