Manter a qualidade de código e medir a cobertura de testes é uma prática essencial em projetos backend modernos. O SonarQube é uma ferramenta robusta para essa finalidade, oferecendo relatórios de bugs, vulnerabilidades, code smells e cobertura de testes unitários.
No presente artigo, vamos configurar o SonarQube para um projeto Java (Spring ou Quarkus) que utiliza JUnit e Mockito, e entender como ignorar pacotes que não envolvem regras de negócio, como Entity, Dto e Repository.
A premissa é ter o Docker e Docker-Compose instalados, caso ainda não tenha, verifique Instalando Docker e Docker Compose no Linux (qualquer distro) ou Instalando Docker no Windows 10
- Subindo o SonarQube com Docker
- Configurando o projeto backend
O projeto backend pode ser utilizando o framework Spring Boot ou Quarkus, ambos utilizando Maven como ferramenta de build.
Certifique-se de que o projeto possui testes unitários configurados com JUnit 5 e Mockito, caso ainda não implementou os testes unitários utilizando JUnit e Mockito (InjectMocks e Mock), implemente para poder continuar com os demais procedimentos a seguir.
- Configuração no application.properties
- Arquivo sonar-project.properties
- Configurando o plugin Sonar no Maven
- Executando os testes e análise
- Visualizando os resultados
O primeiro passo é subir o SonarQube localmente com o container oficial:
docker run -d --name sonarqube-backend -p 9000:9000 sonarqube:latest
Após iniciar, acesse o painel em: http://localhost:9000
O login padrão é admin / admin.
Altere a senha e gere um token de autenticação em:
My Account → Security → Generate Tokens
Copie e guarde o token, pois ele será utilizado na integração do projeto.
Para que o SonarQube consiga autenticar e se comunicar com o projeto, adicione as propriedades de configuração no application.properties:
sonar.host.url=http://localhost:9000
sonar.login=TOKEN_AQUI
Essas configurações permitem que o Maven utilize o token de autenticação diretamente.
Crie o arquivo sonar-project.properties na raiz do projeto com o seguinte conteúdo:
sonar.projectKey=Projeto-Backend
sonar.projectName=Projeto-Backend
sonar.projectVersion=1.0
sonar.sources=src/main/java
sonar.tests=src/test/java
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.host.url=http://localhost:9000
sonar.login=TOKEN_AQUI
sonar.branch.name=develop
# Caminho do relatório de cobertura
sonar.junit.reportPaths=target/surefire-reports
sonar.jacoco.reportPaths=target/jacoco.exec
sonar.java.binaries=target/classes
# Ignorar pacotes que não envolvem regra de negócio
sonar.exclusions=**/entity/**,**/model/**,**/dto/**,**/repository/**
A propriedade sonar.exclusions é fundamental para manter o foco da análise nos pacotes de serviços, regras de negócio e controladores, evitando que o SonarQube penalize a cobertura de testes em classes de domínio simples.
Adicione o plugin SonarQube no arquivo pom.xml caso ainda não esteja presente:
<build>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.10.0.2594</version>
</plugin>
</plugins>
</build>
Com tudo configurado, o fluxo para rodar os testes e enviar os resultados ao SonarQube é simples:
Execute os testes unitários:
mvn clean test
Se todos os testes passarem, execute a análise do Sonar:
mvn sonar:sonar
O Maven irá coletar os resultados de cobertura gerados pelo JUnit/Mockito e enviar para o servidor SonarQube, usando o token informado.
Acesse novamente o painel do SonarQube (http://localhost:9000) e verifique seu projeto.
Você verá:
Cobertura de testes unitários (Jacoco)
Code smells e bugs
Duplicações
Segurança e manutenibilidade do código
Os pacotes Entity, Dto e Repository estarão excluídos da cobertura, mantendo o foco nas classes com lógica de negócio.
Considerações finais
Integrar o JUnit + Mockito com o SonarQube é uma das práticas mais eficazes para manter um backend saudável e bem testado.
Ao utilizar o SonarQube em container Docker, a análise fica portátil e fácil de reproduzir em qualquer ambiente.
Essa configuração também é compatível com pipelines CI/CD, permitindo que a análise de qualidade seja automatizada em cada push, garantindo métricas consistentes e rastreabilidade da evolução do código.
Feito!
Nenhum comentário:
Postar um comentário