Sobes.tech
Junior

Ce biblioteci folosești pentru testare în Kotlin?

sobes.tech AI

Răspuns de la AI

  • JUnit 5: Cadru standard pentru testele unitare în JVM. Îl folosesc pentru majoritatea testelor unitare.

  • MockK: Bibliotecă pentru mockarea obiectelor și comportamentelor. Este utilă pentru crearea de mocks, stubs și verificarea interacțiunii obiectelor.

  • Kotest: Cadru multifuncțional pentru testare, care suportă diferite stiluri de scriere a testelor (Spec, WordSpec, StringSpec etc.). Îl folosesc adesea pentru a scrie teste mai expresive și structurate.

  • Truth: Bibliotecă pentru crearea de afirmații (assertions) ușor de citit. Face testele mai ușor de înțeles.

  • Robolectric: Cadru pentru testarea aplicațiilor Android fără un dispozitiv virtual sau emulator. Simulează mediul Android pe JVM.

  • Espresso: Cadru de la Google pentru testarea interfeței utilizatorului în Android. Îl folosesc pentru teste de integrare și UI în proiecte Android.

Exemplu de utilizare MockK:

// Importăm clasele necesare
import io.mockk.*
import org.junit.jupiter.api.Test

// Clasa de exemplu pe care o vom testa
class MyService(private val dependency: Dependency) {
    fun processData(data: String): String {
        val processed = dependency.process(data)
        return "Result: $processed"
    }
}

// Clasa de dependență pe care o vom mocka
interface Dependency {
    fun process(input: String): String
}

class MyServiceTest {

    @Test
    fun testProcessData() {
        // Creăm mock-ul de dependență
        val mockDependency = mockk<Dependency>()

        // Definim comportamentul mock-ului
        every { mockDependency.process("input") } returns "processed_data"

        // Creăm o instanță a clasei de testat cu mock-ul
        val myService = MyService(mockDependency)

        // Apelăm metoda de testat
        val result = myService.processData("input")

        // Verificăm rezultatul
        assert(result == "Result: processed_data")

        // Verificăm că metoda mock-ului a fost apelată cu argumentul așteptat
        verify { mockDependency.process("input") }
    }
}