Unable to locate CDIProvider in RestClient Unit Test

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.

Help DEV – Analista desenvolvedor Java / Android https://helpdev.com.br/zarelli

Unable to locate CDIProvider in RestClient Unit Test

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Rolar para o topo