Sobes.tech
Junior

Koje biblioteke koristite za testiranje u Kotlinu?

sobes.tech АИ

Одговор од АИ

  • JUnit 5: Standardni okvir za jedinice testova u JVM-u. Koristim ga za većinu jedinica testova.

  • MockK: Biblioteka za mockovanje objekata i ponašanja. Korisno za kreiranje mockova, stubova i verifikaciju interakcija.

  • Kotest: Višenamenski okvir za testiranje koji podržava različite stilove pisanja testova (Spec, WordSpec, StringSpec itd.). Često ga koristim za pisanje izražajnijih i strukturiranijih testova.

  • Truth: Biblioteka za kreiranje čitljivih tvrdnji (assertions). Olakšava razumevanje testova.

  • Robolectric: Okvir za testiranje Android aplikacija bez virtuelnog uređaja ili emulatora. Imitira Android okruženje na JVM-u.

  • Espresso: Google-ov okvir za testiranje korisničkog interfejsa u Android-u. Koristim ga za integracione i UI testove u Android projektima.

Primer korišćenja MockK:

// Uvozimo potrebne klase
import io.mockk.*
import org.junit.jupiter.api.Test

// Primer klase koju ćemo testirati
class MyService(private val dependency: Dependency) {
    fun processData(data: String): String {
        val processed = dependency.process(data)
        return "Result: $processed"
    }
}

// Klasa zavisnosti koju ćemo mock-ovati
interface Dependency {
    fun process(input: String): String
}

class MyServiceTest {

    @Test
    fun testProcessData() {
        // Kreiramo mock zavisnosti
        val mockDependency = mockk<Dependency>()

        // Definišemo ponašanje mока
        every { mockDependency.process("input") } returns "processed_data"

        // Kreiramo instancu klase za testiranje sa mock-om
        val myService = MyService(mockDependency)

        // Pozivamo testiranu metodu
        val result = myService.processData("input")

        // Proveravamo rezultat
        assert(result == "Result: processed_data")

        // Proveravamo da li je metoda mока pozvana sa očekivanim argumentom
        verify { mockDependency.process("input") }
    }
}