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, sedangkanevery { } returnsmenentukan perilakunyaverify { }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
- Menulis Test dengan JUnit5
- Pernyataan
- Mocking dengan MockK
- Pengujian Coroutine