我有一个像这样的CDI bean:
@Dependent
class Parser {
String[] parse(String expression) {
return expression.split("::");
}
}
它被注入到另一个这样的bean中:
@ApplicationScoped
class ParserService {
@Inject
Parser parser;
//...
}
我想做的是继续在常规代码中使用Parser
,但是我想使用“模拟”进行测试。我该如何实现?
答案 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的任何情况下使用。