anúncios

quarta-feira, 12 de novembro de 2025

Sincronizando o seu projeto backend Java (Spring/Quarkus) com JUnit e Mockito no SonarQube

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

  1. Subindo o SonarQube com Docker
  2. 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.

  3. 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.

  4. Configuração no application.properties
  5. 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.

  6. Arquivo sonar-project.properties
  7. 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.

  8. Configurando o plugin Sonar no Maven
  9. 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>
    
    
  10. Executando os testes e análise
  11. 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.

  12. Visualizando os resultados
  13. 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