Testes em Kotlin: frameworks e ferramentas para desenvolvedores

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
Here is the translated HTML content from Russian to Portuguese (Português), with all HTML tags preserved and only the text content translated. Programming terms, code examples, and proper nouns remain in English. ```html

Testes em Kotlin: frameworks e ferramentas para escrever código confiável



Kotlin é uma linguagem moderna, amplamente utilizada para desenvolvimento de aplicativos Android, soluções de servidor (Ktor, Spring Boot) e projetos multiplataforma. A qualidade do código depende diretamente da cobertura de testes. Neste artigo, vamos explorar as principais ferramentas de teste em Kotlin: frameworks para escrever testes, bibliotecas para mocking e utilitários para verificar corrotinas.



1. JUnit 5 — a base dos testes



JUnit 5 é o framework padrão para testes unitários em Java/Kotlin. Ele fornece as anotações @Test, @BeforeEach, @AfterEach e um mecanismo de extensões (Extensions). Em Kotlin, os testes são concisos:



import org.junit.jupiter.api.Testimport org.junit.jupiter.api.Assertions.*

class CalculatorTest { private val calculator = Calculator()

@Test fun `addition should work correctly`() { assertEquals(4, calculator.add(2, 2)) }

@Test fun `division by zero throws exception`() { assertThrows<ArithmeticException> { calculator.divide(10, 0) } }}


Características do uso do JUnit 5 com Kotlin:

  • Os nomes dos testes podem ser escritos entre crases — isso melhora a legibilidade.
  • Funciona com qualquer corrotina através de @Test e da extensão kotlinx-coroutines-test.
  • Suporta testes parametrizados (@ParameterizedTest).


2. Kotest — um framework poderoso focado em Kotlin



Kotest (anteriormente KotlinTest) é um framework completo, desenvolvido especificamente para Kotlin. Ele oferece vários estilos de escrita de testes: String Spec, Fun Spec, Describe Spec e outros. Exemplo usando Behaviour Driven Development (BDD):



import io.kotest.core.spec.style.StringSpecimport io.kotest.matchers.shouldBe

class UserServiceTest : StringSpec({ "user should be created with correct name" { val user = UserService().createUser("Alice") user.name shouldBe "Alice" user.isActive shouldBe true }})


Vantagens do Kotest:

  • Matchers (verificações) embutidos para coleções, strings, números.
  • Suporte a corrotinas, provedores de dados (@TestFactory) e timeouts.
  • Configuração flexível de testes através de projectConfig.
  • Integração com Gradle e Maven.


3. MockK — mocking para Kotlin



MockK é uma biblioteca para criar objetos mock, que leva em conta as particularidades do Kotlin: funções suspend, funções de extensão, classes sealed e singletons object. Exemplo de uso:



import io.mockk.*import org.junit.jupiter.api.Test

class UserServiceTest { @Test fun `should call repository when saving user`() { val repo = mockk<UserRepository>() every { repo.save(any()) } returns Unit

val service = UserService(repo) service.saveUser("Bob")

verify { repo.save(any()) } }}


Principais recursos do MockK:

  • mockk() — criação de mock, spyk() — mock parcial de um objeto real.
  • coEvery e coVerify para trabalhar com corrotinas.
  • Verificação da ordem das chamadas (verifyOrder), captura de argumentos (slot).
  • Suporte às anotações @MockK e @RelaxedMockK.


4. Testando corrotinas: kotlinx-coroutines-test



Ao testar código assíncrono com corrotinas, é importante controlar o tempo. A biblioteca kotlinx-coroutines-test fornece runTest e TestCoroutineDispatcher:



import ko
```                    

Recommendations