0Pricing
Kotlin Academy · Pelajaran

Mocking dengan MockK

Buat mock dependensi

Mocking dengan MockK adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.

Apa itu MockK?

MockK adalah pustaka peniruan yang dibuat untuk Kotlin. Pustaka ini membuat versi tiruan dari dependensi agar Anda dapat menguji sebuah kelas secara terisolasi.

  • Dukungan Kotlin kelas satu (objek, ekstensi, coroutine)
  • DSL yang mudah dibaca untuk menentukan perilaku dan memverifikasi

Menambahkan MockK

Tambahkan MockK sebagai dependensi pengujian.

dependencies {
    testImplementation("io.mockk:mockk:1.13.11")
}

Membuat Tiruan

Gunakan mockk<Type>() untuk membuat tiruan. Secara bawaan, metodenya belum ditentukan perilakunya dan akan gagal jika dipanggil.

import io.mockk.mockk

interface Repo { fun find(id: Int): String }

val repo = mockk<Repo>()

Menentukan Perilaku dengan setiap

Tentukan perilaku menggunakan every { } returns .... Ini memberi tahu tiruan apa yang harus dikembalikan untuk panggilan tertentu.

import io.mockk.every
import io.mockk.mockk

interface Repo { fun find(id: Int): String }

val repo = mockk<Repo>()
// every { repo.find(1) } returns "Ada"

Memverifikasi Panggilan

Gunakan verify { } untuk memastikan suatu metode telah dipanggil. Anda dapat menetapkan jumlah panggilan yang tepat.

import io.mockk.verify

// verify { repo.find(1) }
// verify(exactly = 2) { repo.find(any()) }
// verify(exactly = 0) { repo.find(99) }

Pencocok Argumen

Pencocok seperti any(), eq(), dan match { } membuat penentuan perilaku dan verifikasi menjadi fleksibel.

import io.mockk.every
import io.mockk.mockk

interface Repo { fun find(id: Int): String }
val repo = mockk<Repo>()
// every { repo.find(any()) } returns "X"
// every { repo.find(match { it > 10 }) } returns "big"

Tiruan Longgar

Tiruan relaxed mengembalikan nilai bawaan yang wajar (0, string kosong, dan sebagainya) untuk panggilan yang perilakunya belum ditentukan, sehingga Anda tidak perlu menentukan perilaku untuk semuanya.

import io.mockk.mockk

interface Logger { fun log(msg: String) }

val logger = mockk<Logger>(relaxed = true)

Menangkap Argumen

Gunakan slot dengan capture() untuk memeriksa argumen persis yang diteruskan ke metode tiruan.

import io.mockk.slot
import io.mockk.verify

val msgSlot = slot<String>()
// verify { logger.log(capture(msgSlot)) }
// println(msgSlot.captured)

Objek Pengintai

spyk membungkus objek nyata: metode nyata dijalankan kecuali Anda menentukan perilaku untuknya. Ini berguna untuk peniruan sebagian.

import io.mockk.spyk

class Calc { fun square(n: Int) = n * n }

val calc = spyk(Calc())
// real square runs; you can still verify { calc.square(3) }

Melempar Pengecualian dari Tiruan

Tentukan perilaku suatu metode agar melempar pengecualian sehingga Anda dapat menguji jalur penanganan kesalahan.

import io.mockk.every
import io.mockk.mockk

interface Repo { fun find(id: Int): String }
val repo = mockk<Repo>()
// every { repo.find(0) } throws NoSuchElementException()

Melakukan Pembersihan

Panggil clearAllMocks() dalam @AfterEach, atau gunakan MockKExtension JUnit5, untuk mengatur ulang keadaan tiruan di antara pengujian dan mencegah kebocoran.

import io.mockk.clearAllMocks
import org.junit.jupiter.api.AfterEach

class ServiceTest {
    @AfterEach
    fun tearDown() { clearAllMocks() }
}

Pemeriksaan Cepat

Anda memiliki tiruan dengan banyak metode, tetapi hanya memedulikan satu metode. Anda ingin metode yang perilakunya belum ditentukan mengembalikan nilai bawaan yang aman. Apa yang harus Anda buat?

Ringkasan

MockK memungkinkan Anda mengisolasi kode yang sedang diuji:

  • mockk() membuat tiruan, sedangkan every { } returns menentukan perilakunya
  • verify { } memeriksa interaksi
  • Pencocok, penangkapan dengan slot, spyk, dan tiruan longgar
  • clearAllMocks() di antara pengujian

Berikutnya: menguji coroutine.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mocking dengan MockK” gratis?

Ya — teks lengkap “Mocking dengan MockK” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mocking dengan MockK”?

Buat mock dependensi Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Kotlin Academy?

Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Mocking dengan MockK” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menulis Test dengan JUnit5
  2. Pernyataan
  3. Mocking dengan MockK
  4. Pengujian Coroutine
← Kembali ke Kotlin Academy