Mockk 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 Mockk: o que é e para que serve

\n\n

Mockk é uma biblioteca moderna para simulação (criação de objetos fictícios) na linguagem de programação Kotlin. Ela foi especialmente projetada considerando as particularidades do Kotlin: nulabilidade, funções de extensão, corrotinas, objetos companheiros e outros recursos que não existem em Java.

\n\n

Para que serve a biblioteca Mockk? Ao escrever testes unitários, frequentemente nos deparamos com situações em que a classe testada depende de outras classes, serviços, bancos de dados ou APIs externas. Para isolar o código testado e tornar os testes rápidos, confiáveis e independentes de fatores externos, criamos "mocks" (objetos simulados) — objetos substitutos que imitam o comportamento das dependências reais.

\n\n

Principais recursos do Mockk:

\n
    \n
  • Criação de mocks para classes, interfaces e objetos
  • \n
  • Suporte a anotações (@MockK, @RelaxedMockK, @SpyK)
  • \n
  • Trabalho com corrotinas (coEvery, coVerify)
  • \n
  • Simulação de funções de extensão
  • \n
  • Simulação de métodos estáticos e objetos companheiros
  • \n
  • Suporte a slots e captura de argumentos
  • \n
  • Suporte a simulação parcial (spy)
  • \n
\n\n

Instalação do Mockk

\n\n

Mockk é distribuído através do Maven Central. Para adicioná-lo ao projeto, inclua a dependência no arquivo build.gradle.kts (para Gradle com Kotlin DSL):

\n\n
// build.gradle.kts\ndependencies {\n    testImplementation("io.mockk:mockk:1.13.10")\n}
\n\n

Para Gradle com Groovy DSL:

\n\n
// build.gradle\ndependencies {\n    testImplementation "io.mockk:mockk:1.13.10"\n}
\n\n

Para Maven:

\n\n
<dependency>\n    <groupId>io.mockk</groupId>\n    <artifactId>mockk</artifactId>\n    <version>1.13.10</version>\n    <scope>test</scope>\n</dependency>
\n\n

Se você estiver usando corrotinas, não é necessário adicionar nada extra — o suporte a corrotinas já está integrado no Mockk.

\n\n

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

\n\n

Vamos considerar um exemplo simples. Suponha que temos um serviço UserService que depende de um repositório UserRepository:

\n\n
// Classes para teste\nclass UserRepository {\n    fun findById(id: Long): String {\n        // Implementação real acessa o banco de dados\n        return "Real User"\n    }\n}\n\nclass UserService(private val repository: UserRepository) {\n    fun getUserName(id: Long): String {\n        val user = repository.findById(id)\n        return if (user.isNotEmpty()) user else "Unknown"\n    }\n}
\n\n

Agora vamos escrever um teste usando Mockk:

\n\n
import io.mockk.every\nimport io.mockk.mockk\nimport io.mockk.verify\nimport org.junit.jupiter.api.Test\n\nclass UserServiceTest {\n\n    @Test\n    fun `getUserName deve retornar o nome do usuário do repositório`() {\n        // 1. Criamos um mock para o repositório\n        val mockRepository = mockk<UserRepository>()\n        \n        // 2. Definimos o comportamento do mock\n        every { mockRepository.findById(1L) } returns "John Doe"\n        \n        // 3. Criamos o objeto testado com o mock\n        val service = UserService(mockRepository)\n        \n        // 4. Chamamos o método testado\n        val result = service.getUserName(1L)\n        \n        // 5. Verificamos o resultado\n        assert(result == "John Doe")\n        \n        // 6. Verificamos que o método foi chamado exatamente 1 vez\n        verify(exactly = 1) { mockRepository.findById(1L) }\n    }\n}
\n\n

Principais métodos e funções do Mockk

\n\n

Vamos explorar 10 métodos-chave da biblioteca com descrição detalhada e exemplos.

\n\n

1. mockk() — criação de objeto mock

\n

O que faz: Cria um objeto mock para a classe ou interface especificada. Todos os métodos do mock, por padrão, retornam valores padrão (null, 0, false) e lançam uma exceção se

Recommendations