Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Nesse artigo vamos ensinar como verificar a cobertura de testes em aplicações java utilizando o Jacoco.
Sem dúvida atualmente falar do desenvolvimento de uma solução sem testes beira o absurdo, todo bom projeto tem a preocupação de testar as funcionalidades de varias formas, usando testes unitários, de integração entre outros.
Em projetos Java é uma unanimidade usar JUnit, e com conceitos modernos como Clean Arch ou Arquitetura Hexagonal, é bem mais fácil simples fazer testes de unidade.
Mas como fazer para saber se os testes unitários escritos estão de fato fazendo a cobertura adequada do código?
O propósito desse artigo é te ensinar a configurar uma ferramenta que vai ajudar a verificar a cobertura, com porcentagem, gráfico e mostrando linha a linha a cobertura dos testes em seu projeto.
O Jacoco ou Java Code Coverage, é uma ferramenta para verificar a cobertura de código em projetos Java, possui uma alta integração com o ciclo de aplicações que usam o Maven com gerenciador de pacotes, e é capaz de te entregar de uma forma amigável relatórios da cobertura.
A instalação é bem simples vamos precisar apenas alterar o nosso arquivo pom.xml, adicionando uma dependência e configurar o plugin de build.
Segue as sessões que precisaremos adicionar no nosso pom.xml:
<properties>
<!-- ...others properties -->
<java.version>11</java.version>
<jacoco.version>0.8.6</jacoco.version>
</properties>
<dependencies>
<!-- ...others dependencies -->
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- ...others plugins -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<id>jacoco-initialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>jacoco-site</id>
<phase>package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
pom.xmlApos as alterações no arquivo pom.xml, podemos executar o comando mvn install
para instalar todas as novas dependências e após o comando mvn package
.
Se o seu projeto já tem testes desenvolvidos, apos o comando package será criado o relatório exibindo a cobertura de testes do projeto, para acessar esse relatório basta abrir o arquivo localizado em <diretório-do-projeto>/target/site/jacoco/index.html.
Em um projeto Java utilizamos diversos recursos para nos auxiliar a criar as funcionalidades adequadas, um exemplo deles são os DTO (classes de passagem de informação), entidades de mapeamento de base de dados entrou outros, que não deveriam contar na cobertura do nosso código já que essas classes geralmente não possuem lógica são mais armazenamento de dados.
No exemplo acima veja que a nossa classe de serviço está com a cobertura em 100% mas o projeto no todo com apenas 3%, isso acontece por causa dessas classes que mencionamos, podemos excluir elas da contagem de cobertura.
Para excluir alguns pacotes da cobertura teremos que definir dentro da chave configuração as exclusões de pacotes.
<build>
<plugins>
<!-- ...others plugins -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<configuration>
<excludes>
<exclude>**/dto/*</exclude>
<exclude>**/parse/*</exclude>
<exclude>**/entity/*</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>jacoco-initialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>jacoco-site</id>
<phase>package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
pom.xmlApós a configuração note que as classes dentro dos pacotes de exclusão são ignoradas, aumentando a cobertura total do nosso projeto, e assim considerando de fato as classes que precisam mesmo ter a cobertura de testes.
O Arquivo index.html te permite navegar pelos pacotes analisados verificando as classes e até as linhas que estão cobertas no código.
Para se ter um controle melhor de qualidade de código e cobertura de testes no seu projeto é interessante aplicar a infra estrutura um processo de Quality Gate, usando um software de verificação de qualidade como o SonarQube por exemplo, além de verificar a cobertura, também te mostrará relatórios de code smells e duplicação de códigos.
O SonarQube se integra facilmente com o plugin instalado, podendo utilizar as métricas exportadas pelo plugin.