Sobes.tech
Junior

Que bibliotecas você usa para testes em Kotlin?

sobes.tech IA

Resposta da IA

  • JUnit 5: Estrutura padrão para testes unitários na JVM. Uso-a na maioria dos testes unitários.

  • MockK: Biblioteca para simular objetos e comportamentos. Útil para criar mocks, stubs e verificar a interação de objetos.

  • Kotest: Estrutura multifuncional para testes, suportando vários estilos de escrita de testes (Spec, WordSpec, StringSpec, etc.). Uso frequentemente para escrever testes mais expressivos e estruturados.

  • Truth: Biblioteca para criar afirmações (assertions) legíveis. Torna os testes mais compreensíveis.

  • Robolectric: Estrutura para testar aplicações Android sem dispositivo virtual ou emulador. Simula o ambiente Android na JVM.

  • Espresso: Estrutura do Google para testar a interface de utilizador no Android. Uso para testes de integração e UI em projetos Android.

Exemplo de uso do MockK:

// Importar as classes necessárias
import io.mockk.*
import org.junit.jupiter.api.Test

// Classe de exemplo que vamos testar
class MyService(private val dependency: Dependency) {
    fun processData(data: String): String {
        val processed = dependency.process(data)
        return "Result: $processed"
    }
}

// Classe de dependência que vamos simular
interface Dependency {
    fun process(input: String): String
}

class MyServiceTest {

    @Test
    fun testProcessData() {
        // Criar o mock da dependência
        val mockDependency = mockk<Dependency>()

        // Definir o comportamento do mock
        every { mockDependency.process("input") } returns "processed_data"

        // Criar uma instância da classe a testar com o mock
        val myService = MyService(mockDependency)

        // Executar o método a testar
        val result = myService.processData("input")

        // Verificar o resultado
        assert(result == "Result: processed_data")

        // Verificar que o método do mock foi chamado com o argumento esperado
        verify { mockDependency.process("input") }
    }
}