Introdução ao Mockk: o que é e para que serve
\n\nMockk é 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\nPara 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\nPrincipais 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
Instalação do Mockk
\n\nMockk é 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):
// build.gradle.kts\ndependencies {\n testImplementation("io.mockk:mockk:1.13.10")\n}\n\nPara Gradle com Groovy DSL:
\n\n// build.gradle\ndependencies {\n testImplementation "io.mockk:mockk:1.13.10"\n}\n\nPara 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\nSe você estiver usando corrotinas, não é necessário adicionar nada extra — o suporte a corrotinas já está integrado no Mockk.
\n\nInício rápido com exemplo de código
\n\nVamos considerar um exemplo simples. Suponha que temos um serviço UserService que depende de um repositório UserRepository:
// 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\nAgora vamos escrever um teste usando Mockk:
\n\nimport 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\nPrincipais métodos e funções do Mockk
\n\nVamos explorar 10 métodos-chave da biblioteca com descrição detalhada e exemplos.
\n\n1. mockk() — criação de objeto mock
\nO 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
Também na biblioteca
sqlc para Go: guia completo com exemplos práticos
Ktor Client Kotlin: guia completo com exemplos práticos
Parsing de HTML em Kotlin: jsoup, ktor, khtml e outras ferramentas