如何在 Quarkus 中为测试覆盖 CDI bean?

5

我有一个类似这样的CDI Bean:

@Dependent
class Parser {

  String[] parse(String expression) {
     return expression.split("::");
  }
}

它会像这样被注入到另一个bean中:
@ApplicationScoped
class ParserService {

  @Inject
  Parser parser;

  //...
}

我想做的是在我的常规代码中继续使用Parser,但我想为测试目的使用一个“模拟器”。我该如何实现这一点?
1个回答

7

在这种情况下,需要做的就是在测试目录中创建一个类似以下内容的bean:

@Alternative
@Priority(1)
@Singleton
class MockParser extends Parser {

    String[] parse(String expression) {
        // some other implementation
    }
}

这里的@Alternative@Priority是CDI注解,Quarkus将使用它们来确定仅在测试中使用MockParser而不是Parser

更多详细信息可以在扩展作者的指南中找到。

注意:使用@Alternative@Priority并不仅限于仅在测试代码中使用。它们可以用于任何需要“覆盖”bean的情况。


1
它在我们的代码上也起作用了。谢谢。 - Caner Yeşildağ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接