【问题标题】:Quarkus testing using @QuarkusTest, mocks and javax.enterprise.inject.Instance使用 @QuarkusTest、模拟和 javax.enterprise.inject.Instance 进行 Quarkus 测试
【发布时间】:2021-08-27 14:03:38
【问题描述】:

我们有一个应用程序使用 javax.enterprise.inject.Instance 来查找服务的所有验证器。这似乎工作得很好,但在测试期间,我们希望用模拟替换其中一些验证器以跳过它们的行为,以便更容易接触到其他验证器。

当我们尝试使用“旧方法”(请参阅​​ Blog-post on this)执行此操作时,我们注意到只有带有 @Mock 的类被注入,而不是任何普通类。

在尝试“新方法”时,我们得到一个 javax.enterprise.inject.AmbiguousResolutionException,告诉我们 TypeBValidator 被发现两次。

这是我们应用程序的精简版本的设置,显示了行为:

  • 验证器接口
  • TypeAValidator (@ApplicationScoped)
  • TypeBValidator (@ApplicationScoped)
  • REST-Service-class 具有这样的 @Inject:Instance<Validator> validators 通过构造函数。

在测试范围内我们有:

  • TypeBMockValidator(在旧方法中有@Mock,在新方法中有no @Mock)
  • @QuarkusTest 注释的REST 服务的测试类。这个测试类使用 reassured 调用 REST 服务,就像在生成 an example project 时提供的那样。

详情请见the example project

我正在寻找一种稳定且可预测的方法来仅在测试期间替换 TypeBValidator。任何帮助将不胜感激。

【问题讨论】:

标签: java cdi quarkus


【解决方案1】:

事实证明,这不是一个错误,而是当多个类层次结构中多个类是 bean 时 CDI 的预期行为。 在这种情况下,最简单的解决方案是将TypeBValidator 注释为@DefaultBean

详情请见https://github.com/quarkusio/quarkus/issues/19773#issuecomment-909974623

【讨论】:

    猜你喜欢
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2021-06-07
    • 2021-07-05
    • 2021-05-22
    相关资源
    最近更新 更多