0Pricing
Kotlin Academy · Lekcja

Mockowanie z MockK

Mockuj zależności

Mockowanie z MockK to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Czym jest MockK?

MockK to biblioteka do mockowania stworzona dla Kotlina. Tworzy zastępcze wersje zależności, aby można było testować klasę w izolacji.

  • Pełna obsługa funkcji Kotlina (obiektów, rozszerzeń i korutyn)
  • Czytelny DSL do definiowania zachowania i weryfikowania wywołań

Dodawanie MockK

Należy dodać MockK jako zależność testową.

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

Tworzenie mocka

Do utworzenia mocka służy mockk<Type>(). Domyślnie jego metody nie mają zdefiniowanego zachowania, a ich wywołanie zakończy się niepowodzeniem.

import io.mockk.mockk

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

val repo = mockk<Repo>()

Definiowanie zachowania za pomocą every

Zachowanie definiuje się za pomocą every { } returns .... Informuje to mock, jaką wartość ma zwrócić dla danego wywołania.

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"

Weryfikowanie wywołań

verify { } służy do sprawdzenia, czy metoda została wywołana. Można wymagać dokładnej liczby wywołań.

import io.mockk.verify

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

Dopasowywanie argumentów

Dopasowania takie jak any(), eq() i match { } zwiększają elastyczność stubów i weryfikacji.

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"

Mocki relaxed

Mock z opcją relaxed zwraca rozsądne wartości domyślne (0, pusty ciąg znaków itp.) dla wywołań bez stubów, dzięki czemu nie trzeba definiować zachowania każdej metody.

import io.mockk.mockk

interface Logger { fun log(msg: String) }

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

Przechwytywanie argumentów

Za pomocą slot i capture() można sprawdzić dokładny argument przekazany do mockowanej metody.

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

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

Szpiegi

spyk opakowuje rzeczywisty obiekt: rzeczywiste metody są wykonywane, chyba że zdefiniuje się dla nich stuby. Jest to przydatne przy częściowym mockowaniu.

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

Zgłaszanie wyjątku przez mock

Można zdefiniować dla metody zgłaszanie wyjątku, aby testować ścieżki obsługi błędów.

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

Czyszczenie stanu

Należy wywołać clearAllMocks() w @AfterEach albo użyć JUnit5 MockKExtension, aby resetować stan mocków między testami i zapobiegać jego przenikaniu.

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

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

Szybkie sprawdzenie

Istnieje mock z wieloma metodami, ale potrzebna jest tylko jedna z nich. Metody bez stubów powinny zwracać bezpieczne wartości domyślne. Co należy utworzyć?

Podsumowanie

MockK pozwala izolować testowany kod:

  • mockk() tworzy mocki, a every { } returns definiuje dla nich stuby
  • verify { } sprawdza interakcje
  • Dopasowania, przechwytywanie za pomocą slot, spyk i mocki relaxed
  • clearAllMocks() między testami

Następnie: testowanie korutyn.

Często zadawane pytania

Czy lekcja „Mockowanie z MockK” jest bezpłatna?

Tak — pełny tekst „Mockowanie z MockK” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Mockowanie z MockK”?

Mockuj zależności Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?

Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Mockowanie z MockK”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?

Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Pisanie testów z JUnit5
  2. Asercje
  3. Mockowanie z MockK
  4. Testowanie korutyn
← Powrót do Kotlin Academy