Mockning med MockK
Mocka beroenden
Mockning med MockK är en gratis lektion i Kotlin Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Kotlin Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Kotlin Academy innehåller totalt 4 lektioner.
Vad är MockK?
MockK är ett mockningsbibliotek byggt för Kotlin. Det skapar simulerade versioner av beroenden så att Du kan testa en klass isolerat.
- Förstklassigt Kotlin-stöd (objekt, extension-funktioner, coroutines)
- Ett lättläst DSL för stubbning och verifiering
Lägga till MockK
Lägg till MockK som ett testberoende.
dependencies {
testImplementation("io.mockk:mockk:1.13.11")
}Skapa en mock
Använd mockk<Type>() för att skapa en mock. Som standard är dess metoder inte stubbbade och de misslyckas om de anropas.
import io.mockk.mockk
interface Repo { fun find(id: Int): String }
val repo = mockk<Repo>()Stubbning med every
Definiera beteendet med every { } returns .... Det anger vad mocken ska returnera för ett visst anrop.
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"Verifiera anrop
Använd verify { } för att verifiera att en metod anropades. Du kan kräva ett exakt antal anrop.
import io.mockk.verify
// verify { repo.find(1) }
// verify(exactly = 2) { repo.find(any()) }
// verify(exactly = 0) { repo.find(99) }Argumentmatchare
Matchare som any(), eq() och match { } gör stubbar och verifieringar flexibla.
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"Relaxerade mockar
En relaxed-mock returnerar rimliga standardvärden (0, tom sträng och så vidare) för ostubbade anrop, så att Du inte behöver stubba allt.
import io.mockk.mockk
interface Logger { fun log(msg: String) }
val logger = mockk<Logger>(relaxed = true)Fånga argument
Använd en slot med capture() för att granska det exakta argument som skickades till en mockad metod.
import io.mockk.slot
import io.mockk.verify
val msgSlot = slot<String>()
// verify { logger.log(capture(msgSlot)) }
// println(msgSlot.captured)Spioner
En spyk omsluter ett verkligt objekt: verkliga metoder körs om Du inte stubbar dem. Det är användbart för partiell mockning.
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) }Kasta ett undantag från en mock
Stubba en metod så att den kastar ett undantag, så att Du kan testa felhanteringsvägar.
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()Städa upp
Anropa clearAllMocks() i @AfterEach, eller använd JUnit5:s MockKExtension, för att återställa mockarnas tillstånd mellan tester och undvika läckage.
import io.mockk.clearAllMocks
import org.junit.jupiter.api.AfterEach
class ServiceTest {
@AfterEach
fun tearDown() { clearAllMocks() }
}Snabb kontroll
Du har en mock med många metoder men bryr Dig bara om en. Du vill att ostubbade metoder ska returnera ofarliga standardvärden. Vad skapar Du?
Sammanfattning
Med MockK kan Du isolera koden som testas:
mockk()skapar mockar ochevery { } returnsstubbar demverify { }kontrollerar interaktioner- Matchare,
slot-fångst,spykoch relaxerade mockar clearAllMocks()mellan tester
Nästa steg: testa coroutines.
Lär dig Kotlin med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 51
- Lektioner
- 203
Vanliga frågor
Är lektionen ”Mockning med MockK” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Kotlin Academy, inklusive ”Mockning med MockK”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Kotlin Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Mockning med MockK”?
Mocka beroenden Ni övar på Kotlin Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Kotlin Academy?
Du behöver inga förkunskaper. Utbildningen i Kotlin Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Mockning med MockK”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Kotlin Academy-lektionen?
Ja. Varje Kotlin Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Skriva tester med JUnit5
- Asserteringar
- Mockning med MockK
- Testning av coroutines