Sobes.tech
Junior

Jakie biblioteki używasz do testowania w Kotlin?

sobes.tech AI

Odpowiedź od AI

  • JUnit 5: Standardowe ramy do testów jednostkowych w JVM. Używam go do większości testów jednostkowych.

  • MockK: Biblioteka do mockowania obiektów i zachowań. Przydatna do tworzenia mocków, stubów i weryfikacji interakcji obiektów.

  • Kotest: Wielofunkcyjne ramy testowe obsługujące różne style pisania testów (Spec, WordSpec, StringSpec itp.). Często używam go do pisania bardziej wyrazistych i strukturalnych testów.

  • Truth: Biblioteka do tworzenia czytelnych twierdzeń (assertions). Ułatwia zrozumienie testów.

  • Robolectric: Ramy do testowania aplikacji Android bez wirtualnego urządzenia lub emulatora. Symuluje środowisko Android na JVM.

  • Espresso: Ramy od Google do testowania interfejsu użytkownika w Android. Używam go do testów integracyjnych i UI w projektach Android.

Przykład użycia MockK:

// Importujemy niezbędne klasy
import io.mockk.*
import org.junit.jupiter.api.Test

// Przykładowa klasa, którą będziemy testować
class MyService(private val dependency: Dependency) {
    fun processData(data: String): String {
        val processed = dependency.process(data)
        return "Result: $processed"
    }
}

// Klasa zależności, którą będziemy mockować
interface Dependency {
    fun process(input: String): String
}

class MyServiceTest {

    @Test
    fun testProcessData() {
        // Tworzymy mock zależności
        val mockDependency = mockk<Dependency>()

        // Definiujemy zachowanie mocka
        every { mockDependency.process("input") } returns "processed_data"

        // Tworzymy instancję klasy testowanej z mockiem
        val myService = MyService(mockDependency)

        // Wywołujemy testowaną metodę
        val result = myService.processData("input")

        // Sprawdzamy wynik
        assert(result == "Result: processed_data")

        // Sprawdzamy, czy metoda mocka została wywołana z oczekiwanym argumentem
        verify { mockDependency.process("input") }
    }
}