Kotlin Academy · Урок

Написание тестов с JUnit5

Структурируйте тесты

Урок 1 из 413 шагов

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

Что такое JUnit5?

JUnit5 (JUnit Jupiter) — стандартная платформа для тестирования JVM и Kotlin. Она предоставляет аннотации для обозначения и структурирования кода тестов.

  • Тесты находятся в src/test/kotlin
  • Каждый тест является функцией
  • Средство запуска выполняет их и сообщает результаты

Добавление зависимости

Добавьте JUnit Jupiter в конфигурацию тестов и включите платформу JUnit.

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
}

tasks.test {
    useJUnitPlatform()
}

Ваш первый тест

Пометьте функцию аннотацией @Test. Тест проверяет определённое свойство вашего кода.

import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.assertEquals

class MathTest {
    @Test
    fun addsTwoNumbers() {
        assertEquals(4, 2 + 2)
    }
}

Понятные имена тестов

Используйте @DisplayName, чтобы получать понятные отчёты о тестах, не придумывая длинные имена функций.

import org.junit.jupiter.api.Test
import org.junit.jupiter.api.DisplayName

class OrderTest {
    @Test
    @DisplayName("total includes tax")
    fun totalWithTax() {
        // ...
    }
}

Настройка с помощью @BeforeEach

@BeforeEach выполняется перед каждым тестом и идеально подходит для создания чистых исходных данных. @AfterEach выполняется после каждого теста для очистки.

import org.junit.jupiter.api.BeforeEach

class CartTest {
    private lateinit var cart: MutableList<String>
    @BeforeEach
    fun setUp() {
        cart = mutableListOf()
    }
}

Настройка на уровне класса

@BeforeAll и @AfterAll выполняются один раз для всего класса. В Kotlin им нужен сопутствующий объект с @JvmStatic (или жизненный цикл на уровне класса).

import org.junit.jupiter.api.BeforeAll

class DbTest {
    companion object {
        @BeforeAll
        @JvmStatic
        fun connect() {
            // open shared connection
        }
    }
}

Подготовка — действие — проверка

Структурируйте каждый тест в три понятные фазы:

  • Подготовка — настройте входные данные и состояние
  • Действие — вызовите проверяемый код
  • Проверка — проверьте результат

Так тесты остаются понятными и сфокусированными.

Вложенные тесты

@Nested объединяет связанные тесты и создаёт древовидный отчёт, документирующий поведение кода.

import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test

class StackTest {
    @Nested
    inner class WhenEmpty {
        @Test fun isEmpty() { /* ... */ }
    }
}

Параметризованные тесты

Запускайте один и тот же тест с несколькими входными данными с помощью @ParameterizedTest и источника значений.

import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.ValueSource
import org.junit.jupiter.api.Assertions.assertTrue

class NumberTest {
    @ParameterizedTest
    @ValueSource(ints = [2, 4, 6])
    fun isEven(n: Int) {
        assertTrue(n % 2 == 0)
    }
}

Отключение и добавление тегов

Временно пропускайте тест с помощью @Disabled, а также группируйте тесты с помощью @Tag, чтобы включать их в запуски CI или исключать из них.

import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Test

class FlakyTest {
    @Test
    @Disabled("fix later")
    @Tag("slow")
    fun pending() { }
}

Самодостаточный пример

Ниже приведены простая функция на чистом Kotlin и идея её тестирования (сам тест выполняется под управлением JUnit).

fun add(a: Int, b: Int): Int = a + b

fun main() {
    val result = add(2, 3)
    println(if (result == 5) "PASS" else "FAIL")
}

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

Перед каждым отдельным методом теста вам нужен новый пустой список. Какая аннотация подходит?

Повторение

Вы умеете структурировать тесты JUnit5:

  • @Test обозначает тесты, а @DisplayName задаёт им имена
  • @BeforeEach / @BeforeAll выполняют настройку
  • Подход «подготовка — действие — проверка» делает тесты понятными
  • @Nested и @ParameterizedTest помогают организовывать тесты и увеличивать их масштаб

Далее: проверки.

Можно начать бесплатно

Изучай Kotlin с ИИ-репетитором — бесплатно

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

Курсы
51
Уроки
203

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

Урок «Написание тестов с JUnit5» бесплатный?

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

Чему я научусь в уроке «Написание тестов с JUnit5»?

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

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

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

Сколько времени занимает урок «Написание тестов с JUnit5»?

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

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

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

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

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