Testes em Kotlin: frameworks e ferramentas para código de qualidade

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

Testes em Kotlin: visão completa de frameworks e ferramentas



Kotlin — uma linguagem que está rapidamente ganhando popularidade no desenvolvimento backend (Spring Boot, Ktor) e Android. No entanto, uma linguagem poderosa requer ferramentas de teste adequadas. Neste artigo, abordaremos os principais frameworks e bibliotecas para testar aplicações Kotlin: desde o clássico JUnit5 até os modernos Kotest e MockK. O material será útil tanto para iniciantes quanto para desenvolvedores experientes migrando do Java.



1. JUnit5 — a base dos testes modernos



JUnit5 (Jupiter) é o padrão de facto para testes unitários em Java/Kotlin. Em Kotlin, ele é usado com pequenas, mas importantes, particularidades.



  • Suporte a lambdas e funções de ordem superior — os testes podem ser escritos de forma mais concisa.
  • Anotações — @Test, @BeforeEach, @AfterAll funcionam como em Java.
  • Assumptions e Assertions — verificações integradas.


Exemplo de um teste simples com JUnit5 e Kotlin:



import org.junit.jupiter.api.Assertions.assertEqualsimport org.junit.jupiter.api.Test

class CalculatorTest {

private val calculator = Calculator()

@Test fun `addition of two numbers should return correct sum`() { val result = calculator.add(2, 3) assertEquals(5, result) }

@Test fun `should throw exception when dividing by zero`() { assertThrows<IllegalArgumentException> { calculator.divide(10, 0) } }}


Importante: Kotlin permite usar espaços em nomes de funções de teste (com acentos graves), tornando os nomes dos testes legíveis em linguagem natural.



2. Kotest — framework nativo Kotlin



Kotest (anteriormente KotlinTest) é o framework mais completo e flexível, totalmente escrito em Kotlin. Ele oferece vários estilos de escrita de testes (string spec, spec, behavior) e poderosos matchers integrados.



Principais recursos:

  • Property-based testing — geração automática de dados de teste.
  • Testes orientados a dados — com tabelas de dados de entrada.
  • Matchers de asserção poderosos — shouldBe, shouldContain, shouldThrow e outros.
  • Suporte a Coroutines — testCoroutineScope integrado.


Exemplo de teste no estilo "String Spec":



import io.kotest.core.spec.style.StringSpecimport io.kotest.matchers.shouldBeimport io.kotest.matchers.shouldThrow

class UserServiceTest : StringSpec({

val service = UserService()

"should return user by id" { val user = service.getUser(1) user.name shouldBe "Alice" }

"should throw exception for invalid id" { shouldThrow<NoSuchElementException> { service.getUser(-1) } }})


Property-based testing no Kotest:



import io.kotest.property.forAllimport io.kotest.property.arbitrary.int

class MathPropertiesTest : StringSpec({ "addition is commutative" { forAll<Int, Int> { a, b -> (a + b) == (b + a) } }})


3. MockK — mocks para Kotlin



Ao contrário do Mockito (que também pode ser usado), o MockK é totalmente adaptado às particularidades do Kotlin: suporta sealed classes, object, extension functions e coroutines.



Principais recursos:

  • DSL conciso para criar mocks e stubs.
  • Suporte a mocks relaxados (chamadas não verificadas).
  • Verificação da ordem e número de chamadas.
  • Mocks para funções suspend.

Recommendations