Recentemente passei por um problema após ter adicionado a dependência quarkus-smallrye-opentracing
em um projeto Quarkus. O problema ocorreu em um teste de unidade no qual o código passava em uma construção de um RestClientBuilder
para validação da construção da Bean. O seguinte erro foi disparado:
java.lang.IllegalStateException: Unable to locate CDIProvider
at javax.enterprise.inject.spi.CDI.findAllProviders(CDI.java:121)
at javax.enterprise.inject.spi.CDI.getCDIProvider(CDI.java:82)
at javax.enterprise.inject.spi.CDI.current(CDI.java:64)
at io.smallrye.opentracing.SmallRyeRestClientListener.onNewClient(SmallRyeRestClientListener.java:24)
at org.jboss.resteasy.microprofile.client.RestClientBuilderImpl.lambda$build$0(RestClientBuilderImpl.java:172)
Para realizar a correção do problema, notei que o método que realiza o build do RestClientBuilder utiliza a classe statica RestClientListeners que ao realizar um forEach pelos seus elementos ela tenta carregar algumas Beans do sistema pelo CDI do Quarkus, por esse motivo o erro é disparado, já que o teste unitário não carrega o contexto do CDI e as Bean do sistema.
Para correção desse problema em específico no teste de unidade, basta adicionarmos o seguinte código na classe de teste:
static {
//Fix to run this test in unit mode:
//The RestClientListener uses CDI and the Unit tests not load that.
RestClientListeners.get().clear();
}
Just it.