Avatar ·

Ошибка "Test events were not received" при запуске тестов Kotlin в IntelliJ IDEA

Всем привет. Я начинающий Kotlin-разработчик, и у меня возникла проблема при запуске unit-тестов в IntelliJ IDEA. Я использую Gradle, Kotlin 1.9.0 и JUnit 5. Когда я запускаю тесты через IDE (через зеленую стрелочку рядом с классом или методом), консоль выводит сообщение: "Test events were not received" После этого тесты просто не выполняются — никаких результатов, ни зеленых галочек, ни красных крестиков. В консоли Gradle пусто, процесс завершается без ошибок, но и без запуска тестов. При этом, если я запускаю тесты через командную строку с помощью `./gradlew test`, всё работает отлично — тесты проходят, отчеты генерируются. Проблема именно в интеграции IntelliJ IDEA с Gradle для запуска отдельных тестов. Вот мой простой тест: ```kotlin import org.junit.jupiter.api.Test import org.junit.jupiter.api.Assertions.* class CalculatorTest { @Test fun testAddition() { val result = 2 + 2 assertEquals(4, result) } @Test fun testSubtraction() { val result = 5 - 3 assertEquals(2, result) } } ``` И мой `build.gradle.kts`: ```kotlin plugins { kotlin("jvm") version "1.9.0" id("org.jetbrains.kotlin.plugin.allopen") version "1.9.0" } dependencies { testImplementation(kotlin("test")) testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.0") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.0") } tasks.test { useJUnitPlatform() } ``` Я перепробовал: - Invalidate Caches and Restart - Переустановку IntelliJ IDEA - Создание нового проекта с нуля - Изменение версий Kotlin и JUnit Пожалуйста, помогите! Это сводит с ума, когда тесты работают через консоль, но не через IDE. <<>>

Причина проблемы и её решение

Ошибка "Test events were not received" в IntelliJ IDEA при запуске тестов Kotlin через Gradle возникает из-за неправильной настройки интеграции между IDE и системой сборки. Когда вы нажимаете зеленую стрелочку, IntelliJ пытается запустить тест через Gradle, но не получает обратно события о ходе выполнения тестов. Это часто связано с конфликтом версий JUnit, неправильной конфигурацией Gradle или проблемами с плагином Kotlin.

Пошаговое решение

Вот проверенный способ исправить эту ошибку:

  1. Проверьте настройки запуска тестов в IntelliJ IDEA:
    Перейдите в File → Settings → Build, Execution, Deployment → Build Tools → Gradle. В разделе "Run tests using" выберите "IntelliJ IDEA" вместо "Gradle (Default)". Это заставит IDE запускать тесты напрямую, минуя Gradle-прокси.
  2. Обновите конфигурацию build.gradle.kts:
    Убедитесь, что вы используете правильные зависимости. Вот исправленная версия вашего файла:
plugins {
    kotlin("jvm") version "1.9.0"
}

dependencies {
    testImplementation(kotlin("test"))
    testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
}

tasks.test {
    useJUnitPlatform()
    testLogging {
        events("passed", "skipped", "failed")
    }
}

Ключевые изменения:

  • Убрана отдельная зависимость junit-jupiter-api и junit-jupiter-engine — достаточно одной junit-jupiter, которая включает всё необходимое.
  • Добавлен блок testLogging для отладки — он покажет в консоли, какие события происходят.
  • Убран плагин allopen, если он не нужен для вашего проекта.
  1. Очистите кеш Gradle:
    Выполните в терминале IntelliJ IDEA:
./gradlew clean
./gradlew build --refresh-dependencies
  1. Перезапустите IntelliJ IDEA:
    После всех изменений выберите File → Invalidate Caches and Restart.

Альтернативное решение (если не помогло)

Если предыдущие шаги не сработали, попробуйте добавить в settings.gradle.kts следующую настройку:

pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

И в build.gradle.kts явно укажите репозиторий для тестовых зависимостей:

repositories {
    mavenCentral()
}

Проверка результата

После выполнения всех шагов запустите тест через зеленую стрелочку. Если всё настроено правильно, вы увидите:

  • Зеленые галочки рядом с тестовыми методами
  • Вывод в консоли с результатами тестов
  • Отсутствие сообщения "Test events were not received"

Если проблема сохраняется, проверьте версию IntelliJ IDEA — обновите её до последней стабильной версии (на момент написания — 2023.3 или новее). Иногда баги в старых версиях IDE вызывают эту ошибку.

<<>>

Дополнительный подход: использование Gradle Test Runner с правильной конфигурацией

Если вы предпочитаете оставить запуск тестов через Gradle (а не через IntelliJ IDEA), можно настроить Gradle-раннер правильно. Добавьте в build.gradle.kts следующий блок:

tasks.withType<Test> {
    useJUnitPlatform()
    systemProperty("junit.jupiter.execution.parallel.enabled", "false")
    testLogging {
        showStandardStreams = true
        events("PASSED", "FAILED", "SKIPPED")
        exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL
    }
}

Затем в IntelliJ IDEA перейдите в Run → Edit Configurations, выберите конфигурацию Gradle для вашего теста и убедитесь, что в поле "Run" указано test --tests "com.example.CalculatorTest" (подставьте ваш пакет).

Также проверьте, что в gradle.properties нет строки org.gradle.parallel=true — параллельное выполнение иногда вызывает проблемы с передачей тестовых событий.

Этот метод полезен, если вам нужно, чтобы все тесты запускались через Gradle для единообразия с CI/CD системой.