Mocking mit MockK
Simulieren Sie Abhängigkeiten
Mocking mit MockK ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist MockK?
MockK ist eine speziell für Kotlin entwickelte Mocking-Bibliothek. Sie erstellt simulierte Versionen von Abhängigkeiten, damit Sie eine Klasse isoliert testen können.
- Erstklassige Kotlin-Unterstützung (Objekte, Erweiterungen, Coroutines)
- Lesbare DSL für Stubbing und Verifikation
MockK hinzufügen
Fügen Sie MockK als Testabhängigkeit hinzu.
dependencies {
testImplementation("io.mockk:mockk:1.13.11")
}Einen Mock erstellen
Verwenden Sie mockk<Type>(), um einen Mock zu erstellen. Standardmäßig sind seine Methoden nicht gestubbt und schlagen fehl, wenn sie aufgerufen werden.
import io.mockk.mockk
interface Repo { fun find(id: Int): String }
val repo = mockk<Repo>()Stubbing mit every
Definieren Sie das Verhalten mit every { } returns .... Damit legen Sie fest, was der Mock für einen bestimmten Aufruf zurückgibt.
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"Aufrufe verifizieren
Verwenden Sie verify { }, um zu überprüfen, ob eine Methode aufgerufen wurde. Sie können eine genaue Anzahl von Aufrufen verlangen.
import io.mockk.verify
// verify { repo.find(1) }
// verify(exactly = 2) { repo.find(any()) }
// verify(exactly = 0) { repo.find(99) }Argument-Matcher
Matcher wie any(), eq() und match { } machen Stubs und Verifikationen flexibel.
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 Mocks
Ein relaxed-Mock gibt für nicht gestubbte Aufrufe sinnvolle Standardwerte (0, leere Zeichenkette usw.) zurück, sodass Sie nicht alles stubben müssen.
import io.mockk.mockk
interface Logger { fun log(msg: String) }
val logger = mockk<Logger>(relaxed = true)Argumente erfassen
Verwenden Sie einen slot mit capture(), um das genaue Argument zu untersuchen, das an eine gemockte Methode übergeben wurde.
import io.mockk.slot
import io.mockk.verify
val msgSlot = slot<String>()
// verify { logger.log(capture(msgSlot)) }
// println(msgSlot.captured)Spies
Ein spyk umschließt ein echtes Objekt: Echte Methoden werden ausgeführt, sofern Sie sie nicht stubben. Das ist nützlich für partielles Mocking.
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) }Eine Exception von einem Mock auslösen
Stubben Sie eine Methode so, dass sie eine Exception auslöst, damit Sie Fehlerbehandlungspfade testen können.
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()Aufräumen
Rufen Sie clearAllMocks() in @AfterEach auf oder verwenden Sie die JUnit5-MockKExtension, um den Mock-Zustand zwischen Tests zurückzusetzen und unerwünschte Zustandsübernahme zu vermeiden.
import io.mockk.clearAllMocks
import org.junit.jupiter.api.AfterEach
class ServiceTest {
@AfterEach
fun tearDown() { clearAllMocks() }
}Kurze Überprüfung
Sie haben einen Mock mit vielen Methoden, interessieren sich aber nur für eine davon. Nicht gestubbte Methoden sollen harmlose Standardwerte zurückgeben. Was erstellen Sie?
Zusammenfassung
Mit MockK können Sie den zu testenden Code isolieren:
mockk()erstellt Mocks,every { } returnsstubbt sieverify { }überprüft Interaktionen- Matcher,
slot-Erfassung,spyk, Relaxed Mocks clearAllMocks()zwischen Tests
Als Nächstes: Coroutines testen.
Häufig gestellte Fragen
Ist die Lektion „Mocking mit MockK“ kostenlos?
Ja — der vollständige Text von „Mocking mit MockK“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Mocking mit MockK“?
Simulieren Sie Abhängigkeiten Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Kotlin Academy zu starten?
Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Mocking mit MockK“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?
Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Tests mit JUnit5 schreiben
- Assertions
- Mocking mit MockK
- Coroutine-Tests