【发布时间】: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。任何帮助将不胜感激。
【问题讨论】:
-
这听起来像是我们应该在 Quarkus 中研究的东西。请在 GitHub 上打开一个问题