Sobes.tech
Junior

Kotlin-də test üçün hansı kitabxanaları istifadə edirsiniz?

sobes.tech Süni İntellekt

AI-dan cavab

  • JUnit 5: JVM-də vahid testlər üçün standart çərçivə. Əksər vahid testlər üçün istifadə edirəm.

  • MockK: Ob'ektlərin və davranışların mock edilməsi üçün kitabxana. Mocklar, stublar yaratmaq və obyektlərin qarşılıqlı əlaqəsini yoxlamaq üçün əlverişlidir.

  • Kotest: Müxtəlif test yazma tərzlərini dəstəkləyən çoxfunksiyalı test çərçivəsi (Spec, WordSpec, StringSpec və s.). Daha ifadəli və strukturlaşdırılmış testlər yazmaq üçün tez-tez istifadə edirəm.

  • Truth: Oxumaq asan olan iddialar (assertions) yaratmaq üçün kitabxana. Testləri daha anlaşılan edir.

  • Robolectric: Virtual cihaz və ya emulator olmadan Android tətbiqlərini test etmək üçün çərçivə. Android mühitini JVM-də təqlid edir.

  • Espresso: Google tərəfindən hazırlanmış Android-də istifadəçi interfeysini test etmək üçün çərçivə. Android layihələrində inteqrasiya və UI testləri üçün istifadə edirəm.

MockK istifadə nümunəsi:

// Lazımi sinfləri idxal edirik
import io.mockk.*
import org.junit.jupiter.api.Test

// Test edəcəyimiz nümunə sinfi
class MyService(private val dependency: Dependency) {
    fun processData(data: String): String {
        val processed = dependency.process(data)
        return "Result: $processed"
    }
}

// Mock ediləcək asılılıq sinfi
interface Dependency {
    fun process(input: String): String
}

class MyServiceTest {

    @Test
    fun testProcessData() {
        // Asılılığı mock edirik
        val mockDependency = mockk<Dependency>()

        // Mock-un davranışını təyin edirik
        every { mockDependency.process("input") } returns "processed_data"

        // Mock ilə test ediləcək sinfin nümunəsini yaradırıq
        val myService = MyService(mockDependency)

        // Test edilən metodu çağırırıq
        val result = myService.processData("input")

        // Nəticəni yoxlayırıq
        assert(result == "Result: processed_data")

        // Mock-un metodunun gözlənilən arqumentlə çağrıldığını yoxlayırıq
        verify { mockDependency.process("input") }
    }
}