0Pricing
Kotlin Academy · บทเรียน

การจำลองด้วย MockK

จำลองสิ่งที่โค้ดต้องพึ่งพา

การจำลองด้วย MockK เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

MockK คืออะไร

MockK คือไลบรารีสำหรับการจำลองที่สร้างขึ้นสำหรับ Kotlin โดยจะสร้างการพึ่งพาเวอร์ชันจำลอง เพื่อให้คุณทดสอบคลาสแยกจากส่วนอื่นได้

  • รองรับ Kotlin โดยตรง ทั้งออบเจ็กต์ ฟังก์ชันส่วนขยาย และโครูทีน
  • มี DSL ที่อ่านง่ายสำหรับกำหนดพฤติกรรมจำลองและตรวจสอบ

การเพิ่ม MockK

เพิ่ม MockK เป็นการพึ่งพาสำหรับการทดสอบ

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

การสร้างม็อก

ใช้ mockk<Type>() เพื่อสร้างม็อก โดยค่าเริ่มต้น เมธอดของม็อกจะยังไม่มีการกำหนดพฤติกรรม และจะล้มเหลวหากถูกเรียกใช้

import io.mockk.mockk

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

val repo = mockk<Repo>()

การกำหนดพฤติกรรมด้วย every

กำหนดพฤติกรรมด้วย every { } returns ... ซึ่งจะบอกม็อกว่าต้องคืนค่าอะไรสำหรับการเรียกใช้ที่ระบุ

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"

การตรวจสอบการเรียกใช้

ใช้ verify { } เพื่อตรวจยืนยันว่าเมธอดถูกเรียกใช้ คุณสามารถกำหนดจำนวนครั้งที่แน่นอนได้

import io.mockk.verify

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

ตัวจับคู่าร์กิวเมนต์

ตัวจับคู่าร์กิวเมนต์อย่าง any(), eq() และ match { } ช่วยให้การกำหนดพฤติกรรมจำลองและการตรวจสอบมีความยืดหยุ่น

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"

ม็อกแบบผ่อนปรน

ม็อกแบบ relaxed จะคืนค่าเริ่มต้นที่เหมาะสม (0 สตริงว่าง และอื่น ๆ) สำหรับการเรียกใช้ที่ยังไม่ได้กำหนดพฤติกรรม คุณจึงไม่ต้องกำหนดพฤติกรรมให้ทุกกรณี

import io.mockk.mockk

interface Logger { fun log(msg: String) }

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

การดักจับอาร์กิวเมนต์

ใช้ slot ร่วมกับ capture() เพื่อตรวจสอบอาร์กิวเมนต์ที่ถูกส่งไปยังเมธอดจำลองอย่างละเอียด

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

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

สายลับ

spyk จะห่อหุ้มออบเจ็กต์จริงไว้ โดยเมธอดจริงจะทำงานเว้นแต่คุณจะกำหนดพฤติกรรมจำลอง เหมาะสำหรับการจำลองเพียงบางส่วน

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) }

การโยนข้อยกเว้นจากม็อก

กำหนดให้เมธอดจำลองโยนข้อยกเว้น เพื่อให้คุณทดสอบเส้นทางการจัดการข้อผิดพลาดได้

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()

การทำความสะอาด

เรียกใช้ clearAllMocks() ใน @AfterEach หรือใช้ MockKExtension ของ JUnit5 เพื่อรีเซ็ตสถานะของม็อกระหว่างการทดสอบและป้องกันสถานะรั่วไหล

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

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

ตรวจสอบอย่างรวดเร็ว

คุณมีม็อกที่มีเมธอดจำนวนมาก แต่สนใจเพียงเมธอดเดียว และต้องการให้เมธอดที่ยังไม่ได้กำหนดพฤติกรรมคืนค่าเริ่มต้นที่ไม่ก่อปัญหา คุณควรสร้างม็อกแบบใด

สรุปทบทวน

MockK ช่วยให้คุณแยกโค้ดที่กำลังทดสอบออกมาได้:

  • mockk() สร้างม็อก ส่วน every { } returns ใช้กำหนดพฤติกรรม
  • verify { } ตรวจสอบการโต้ตอบ
  • ตัวจับคู่าร์กิวเมนต์ การดักจับด้วย slot การใช้ spyk และม็อกแบบผ่อนปรน
  • clearAllMocks() ระหว่างการทดสอบ

ถัดไป: การทดสอบโครูทีน

คำถามที่พบบ่อย

บทเรียน “การจำลองด้วย MockK” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจำลองด้วย MockK” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจำลองด้วย MockK”

จำลองสิ่งที่โค้ดต้องพึ่งพา คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การจำลองด้วย MockK” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม

ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเขียนเทสต์ด้วย JUnit5
  2. การยืนยันผล
  3. การจำลองด้วย MockK
  4. การทดสอบ Coroutine
← กลับไปที่ Kotlin Academy