Introdução: Por que os testes "verdes" são uma ilusão?
\n\nVocê executa os testes, vê a tão esperada barra verde e se sente um super-herói. Mas e se eu disser que seus testes podem ser inúteis? Que eles testam apenas uma linha em cada dez, e as outras nove são uma "zona morta" onde vivem os bugs? É aqui que entra em cena a cobertura de código com testes (code coverage). Não são apenas números para um relatório, mas seu radar pessoal, mostrando o quão bem os testes "cobrem" seu código Kotlin.
\n\nNeste artigo, vamos explorar como transformar a cobertura de código em Kotlin de uma métrica chata em uma ferramenta poderosa. Você aprenderá quais ferramentas realmente funcionam, o que significam as porcentagens e como não cair na armadilha dos "100% de cobertura". Vamos lá!
\n\nO que é cobertura de código e por que é importante para Kotlin?
\n\nImagine que seu código é um campo de golfe e os testes são os jogadores. A cobertura de código é um mapa que mostra por quais áreas do campo os jogadores passaram. Se os jogadores evitam um bunker perigoso (algoritmo complexo), você fica sabendo.
\n\nNo mundo Kotlin, onde frequentemente usamos corrotinas, classes sealed e funções de extensão, testes ingênuos podem facilmente ignorar ramos inteiros da lógica. As métricas de cobertura ajudam a responder três perguntas:
\n- \n
- Qual porcentagem de linhas de código foi executada durante os testes? \n
- Quais condições (if/else, when) foram testadas? \n
- Quais funções ficaram sem atenção? \n
Sem essas métricas, você corre o risco de lançar em produção um código que funciona "apenas às segundas-feiras".
\n\nFerramentas para medir cobertura em Kotlin: Top 3
\n\nNo ecossistema Kotlin, existem três principais protagonistas que ajudarão você a medir o code coverage. Vamos conhecer cada um.
\n\n1. JaCoCo (Java Code Coverage) — O Veterano
\nA ferramenta mais popular. Funciona no nível do bytecode, portanto é adequada tanto para Java quanto para Kotlin. Sua principal vantagem são as estatísticas ricas e a integração com CI/CD.
\n\nComo configurar no Gradle (Kotlin DSL):
\nplugins {\n id("jacoco")\n}\n\ntasks.jacocoTestReport {\n dependsOn(tasks.test) // Executa os testes antes do relatório\n reports {\n xml.required.set(true)\n html.required.set(true) // Gera um belo relatório HTML\n }\n}\n\nApós executar ./gradlew jacocoTestReport, você obterá um arquivo HTML onde as linhas não cobertas são destacadas em vermelho. Prático, não é?
2. Kover — O Jogador Moderno
\nDesenvolvido especificamente para Kotlin. Ao contrário do JaCoCo, o Kover funciona no nível da AST (árvore sintática abstrata), tornando-o mais preciso para construções específicas do Kotlin (por exemplo, funções inline).
\n\nConfiguração do Kover:
\nplugins {\n id("org.jetbrains.kotlinx.kover") version "0.7.3"\n}\n\nkover {\n excludeSourceSets {\n names("test") // Exclui os próprios testes do relatório\n }\n}\n\nO Kover gera relatórios nos formatos HTML, XML e até mesmo como badges para o GitHub. É a escolha ideal para um projeto puramente Kotlin.
\n\n3. IntelliJ IDEA Coverage — Para verificação rápida
\nFerramenta integrada. Você executa os testes com cobertura (ícone verde "Run with Coverage") e vê o código colorido diretamente na IDE. Prático para desenvolvimento local, mas não para CI.
\n\nDica: Use o IntelliJ para iterações rápidas, e o JaCoCo ou Kover para o relatório final.
\n\nMétricas de cobertura de código: O que significam essas porcentagens?
\n\nQuando você vê "80% de cobertura", parece legal. Mas 80% do quê? Vamos analisar as principais métricas que todas as ferramentas fornecem.
\n\nLine Coverage (Cobertura de linhas)
\nA métrica mais simples. Quantas linhas do código-fonte foram afetadas pelos testes. Se uma linha não foi executada nenhuma vez, ela é considerada não coberta.
\nExemplo:
\nfun process(value: Int): String {\n if (