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, aevery { } returnsdefiniuje dla nich stubyverify { }sprawdza interakcje- Dopasowania, przechwytywanie za pomocą
slot,spyki 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
- Pisanie testów z JUnit5
- Asercje
- Mockowanie z MockK
- Testowanie korutyn