0Pricing
Kotlin Academy · Урок

Имитация с MockK

Имитируйте зависимости

«Имитация с MockK» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

Что такое MockK?

MockK — библиотека имитации, созданная для Kotlin. Она создаёт поддельные версии зависимостей, чтобы вы могли тестировать класс изолированно.

  • Полноценная поддержка Kotlin (объекты, расширения, сопрограммы)
  • Понятный DSL для настройки поведения и проверки

Добавление MockK

Добавьте MockK как зависимость для тестов.

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

Создание имитации

Используйте mockk<Type>(), чтобы создать имитацию. По умолчанию её методы не настроены, и вызов такого метода завершится ошибкой.

import io.mockk.mockk

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

val repo = mockk<Repo>()

Настройка поведения с помощью every

Определяйте поведение с помощью every { } returns .... Это указывает имитации, что возвращать для заданного вызова.

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"

Проверка вызовов

Используйте verify { }, чтобы проверить, был ли вызван метод. Можно потребовать точное количество вызовов.

import io.mockk.verify

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

Сопоставители аргументов

Сопоставители вроде any(), eq() и match { } делают настройки поведения и проверки гибкими.

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 возвращает разумные значения по умолчанию (0, пустую строку и т. д.) для ненастроенных вызовов, поэтому вам не нужно настраивать всё.

import io.mockk.mockk

interface Logger { fun log(msg: String) }

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

Перехват аргументов

Используйте slot вместе с capture(), чтобы изучить точный аргумент, переданный в имитируемый метод.

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

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

Шпионы

spyk оборачивает реальный объект: реальные методы выполняются, если вы не настроили для них другое поведение. Это полезно для частичной имитации.

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

Выбрасывание исключения из имитации

Настройте метод так, чтобы он выбрасывал исключение, и вы сможете проверить пути обработки ошибок.

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

Очистка

Вызовите clearAllMocks() в @AfterEach или используйте расширение JUnit5 MockKExtension, чтобы сбрасывать состояние имитаций между тестами и избегать его утечки.

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

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

Быстрая проверка

У вас есть имитация с множеством методов, но вас интересует только один. Вы хотите, чтобы ненастроенные методы возвращали безвредные значения по умолчанию. Что следует создать?

Повторение

MockK позволяет изолировать проверяемый код:

  • mockk() создаёт имитации, а every { } returns настраивает их поведение
  • verify { } проверяет взаимодействия
  • Сопоставители, перехват с помощью slot, spyk и расслабленные имитации
  • clearAllMocks() между тестами

Далее: тестирование сопрограмм.

Часто задаваемые вопросы

Урок «Имитация с MockK» бесплатный?

Да — полный текст урока «Имитация с MockK» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «Имитация с MockK»?

Имитируйте зависимости Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Имитация с MockK»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Написание тестов с JUnit5
  2. Проверки
  3. Имитация с MockK
  4. Тестирование сопрограмм
← Назад к Kotlin Academy