如何覆盖Quarkus中的CDI bean进行测试?

时间:2019-05-13 19:54:14

标签: quarkus

我有一个像这样的CDI bean:

@Dependent
class Parser {

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

它被注入到另一个这样的bean中:

@ApplicationScoped
class ParserService {

  @Inject
  Parser parser;

  //...
}

我想做的是继续在常规代码中使用Parser,但是我想使用“模拟”进行测试。我该如何实现?

1 个答案:

答案 0 :(得分:1)

在这种情况下,需要做的就是在测试目录中创建如下所示的bean:

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

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

这里@Alternative@Priority是Quarkus将用来确定将使用MockParser而不是Parser的CDI注释(当然仅用于测试)。

>

更多详细信息可以在扩展程序作者的guide中找到。

注意:当然,@Alternarive@Priority的使用不仅限于测试代码。它们可以在使用“覆盖” bean的任何情况下使用。