Kotest para Kotlin: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao Kotest: o que é e para que serve

\n\n

Kotest (anteriormente conhecido como KotlinTest) é uma biblioteca poderosa e flexível para escrever testes na linguagem Kotlin. Ela oferece aos desenvolvedores um rico conjunto de ferramentas para testes unitários, de integração e funcionais. Ao contrário do JUnit padrão, o Kotest oferece múltiplos estilos de escrita de testes (desde o clássico "xUnit" até o Behavior-Driven Development), suporte integrado para property-based testing, matchers (assertions) poderosos e integração com frameworks populares como Spring Boot, MockK e Arrow.

\n\n

Para que serve o Kotest? No desenvolvimento moderno com Kotlin, testar não é apenas verificar código, mas sim a base da qualidade. O Kotest resolve várias tarefas-chave:

\n
    \n
  • Flexibilidade de estilos: Você pode escrever testes no estilo "String Spec", "Fun Spec", "Behavior Spec" e outros, escolhendo o mais conveniente para sua equipe.
  • \n
  • Matchers poderosos: Funções de verificação integradas (shouldBe, shouldContain, shouldThrow) tornam o código dos testes legível e conciso.
  • \n
  • Property-based testing: Permite gerar milhares de dados de teste aleatórios, verificando invariantes do seu código, não apenas valores específicos.
  • \n
  • Integração com corrotinas: O Kotest funciona perfeitamente com corrotinas do Kotlin, permitindo testar código assíncrono sem boilerplate desnecessário.
  • \n
  • Extensibilidade: Você pode criar seus próprios matchers, listeners e extensões.
  • \n
\n\n

Instalação do Kotest

\n\n

O Kotest é distribuído através do Maven Central. Para instalar, você precisa adicionar as dependências no arquivo build.gradle.kts (para Gradle) ou pom.xml (para Maven).

\n\n

Instalação via Gradle (build.gradle.kts)

\n
// Na seção dependencies\ndependencies {\n    // Módulo principal (inclui matchers e estilos básicos)\n    testImplementation("io.kotest:kotest-runner-junit5:5.9.1")\n    // Módulo para property-based testing\n    testImplementation("io.kotest:kotest-property:5.9.1")\n    // Módulo para trabalhar com frameworks (ex: Spring)\n    testImplementation("io.kotest:kotest-extensions-spring:5.9.1")\n}
\n\n

Instalação via Maven (pom.xml)

\n
<dependency>\n    <groupId>io.kotest</groupId>\n    <artifactId>kotest-runner-junit5</artifactId>\n    <version>5.9.1</version>\n    <scope>test</scope>\n</dependency>\n<dependency>\n    <groupId>io.kotest</groupId>\n    <artifactId>kotest-property</artifactId>\n    <version>5.9.1</version>\n    <scope>test</scope>\n</dependency>
\n\n

Nota: A versão 5.9.1 é a atual no momento da escrita deste artigo. Sempre verifique a versão mais recente em MVNRepository.

\n\n

Início rápido com exemplo de código

\n\n

Vamos escrever um teste simples para uma classe calculadora, usando o estilo "Fun Spec" — um dos mais populares e intuitivos.

\n\n
// Classe que será testada\nclass Calculator {\n    fun add(a: Int, b: Int): Int = a + b\n    fun divide(a: Int, b: Int): Int {\n        if (b == 0) throw ArithmeticException("Divisão por zero")\n        return a / b\n    }\n}\n\n// Classe de teste\nimport io.kotest.core.spec.style.FunSpec\nimport io.kotest.matchers.shouldBe\nimport io.kotest.matchers.shouldThrow\n\nclass CalculatorTest : FunSpec({\n    // Inicialização do objeto a ser testado\n    val calculator = Calculator()\n\n    test("soma de dois números positivos") {\n        val result = calculator.add(2, 3)\n        result shouldBe 5\n    }\n\n    test("divisão por zero deve lançar exceção") {\n        shouldThrow<ArithmeticException> {\n            calculator.divide(10, 0)\n        }\n    }\n})
\n\n

Este exemplo

Recommendations