0Pricing
Kotlin Academy · Lektion

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 { } returns stubbt sie
  • verify { } ü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

  1. Tests mit JUnit5 schreiben
  2. Assertions
  3. Mocking mit MockK
  4. Coroutine-Tests
← Zurück zu Kotlin Academy