2

我有一个像这样的 CDI bean:

@Dependent
class Parser {

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

它被注入到另一个 bean 中,如下所示:

@ApplicationScoped
class ParserService {

  @Inject
  Parser parser;

  //...
}

我想做的是继续Parser在我的常规代码中使用,但我想使用“模拟”进行测试。我怎样才能做到这一点?

4

1 回答 1

2

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

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

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

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

更多细节可以在扩展作者指南中找到。

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

于 2019-05-13T19:59:24.970 回答