IntelliJ JUnit 5 тестовый запуск в качестве задачи Gradle.При запуске в качестве отдельного теста иногда получают исключение: NoClassDefFoundError ... / TestExecutionListener - PullRequest
0 голосов
/ 22 октября 2018

Использование IntelliJ IDEA версии 2018.2.5 (Community Edition) в Windows 10 и обучение использованию JUnit 5 параметризованных тестов с Gradle 4.8 на основе образцов JUnit 5 от команды JUnit,

Тестовый запуск, как и ожидалось, как задание Gradle test , но иногда при запуске отдельного теста get

Exception in thread "main" java.lang.NoClassDefFoundError:  
   org/junit/platform/launcher/TestExecutionListener

Как можно исправить это исключение, продолжая использовать IntelliJ 2018.2.5(Community Edition), JUnit 5 с параметром test и использованием Gradle?

Я пытался найти ответ на этот вопрос, но большинство из того, с чем я сталкиваюсь, это ответы, в которых отмечается, что IntellJ с JUnit 5 находится вмного перехода, поэтому не уверен, что доверять.

Подробности

Я знаю, что есть гораздо больше деталей и снимков экрана, чем обычно или за пределами обычного, но когда вы изучаете что-то новое и нуждаетесь в помощии вы начинаете искать информацию, вы устали видеть ответы, которые упускают некоторые важные детали.Так что для тех, кто находится в одной лодке и должен увидеть эту недостающую деталь, надеюсь, я включил ее здесь.Хотя этот вопрос может быть не тем, который вам нужен, подробности здесь могут вам помочь.

Трассировка стека исключений

Exception in thread "main" java.lang.NoClassDefFoundError: org/junit/platform/launcher/TestExecutionListener
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at com.intellij.junit5.JUnit5IdeaTestRunner.createListeners(JUnit5IdeaTestRunner.java:39)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:45)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.launcher.TestExecutionListener
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 13 more

Версии программного обеспечения

Microsoft Windows Версия 10.0.171314.345

IntelliJ IDEA 2018.2.5 (Community Edition)
Сборка # IC-182.4892.20, сборка 16 октября 2018 г. JRE: 1.8.0_152-release-1248-b19 amd64
JVM: виртуальная машина OpenJDK с 64-разрядными серверами от JetBrains sro
Project SDK: 11 (версия Java "11.0.1") IntelliJ - чистая версия, установленная для этого примера.

Используемый образец JUnit: junit5-jupiter-starter-gradle

Gradle: 4.8

build.gradle - точно так же, как в демо

plugins {
    id 'java'
    id 'eclipse' // optional (to generate Eclipse project files)
    id 'idea' // optional (to generate IntelliJ IDEA project files)
}

repositories {
    mavenCentral()
}

dependencies {
    testCompile('org.junit.jupiter:junit-jupiter-api:5.3.1')
    testCompile('org.junit.jupiter:junit-jupiter-params:5.3.1')
    testRuntime('org.junit.jupiter:junit-jupiter-engine:5.3.1')
}

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

wrapper {
    gradleVersion = '4.8'
}

Бегунок Gradle: Platform Test Runner

enter image description here

Шаги, использованные для создания проекта

Скачано junit5-samples
несжатые файлы
в каталоге junit5-samples-r5.3.1 скопировано junit5-jupiter-starter-gradle в C:\Users\Eric\IdeaProjects

использовано IntelliJ Импортировать проект вклЭкран приветствия для загрузки проекта.

enter image description here enter image description here

Использованы параметры по умолчанию для параметров диалога импорта проекта, например, нажмите «Далее» или «Готово» для всехImport Project диалоговых страниц.

C:.
|   .gitignore
|   build-JITPACK.gradle
|   build-SNAPSHOT.gradle
|   build.gradle
|   gradlew
|   gradlew.bat
|   README.md
|
+---.idea
|   |   misc.xml
|   |   modules.xml
|   |   workspace.xml
|   |
|   \---libraries
|           gradle_wrapper.xml
|
+---gradle
|   \---wrapper
|           gradle-wrapper.jar
|           gradle-wrapper.properties
|
\---src
    +---main
    |   |   main.iml
    |   |
    |   \---java
    |       \---com
    |           \---example
    |               \---project
    |                       Calculator.java
    |
    \---test
        |   test.iml
        |
        \---java
            \---com
                \---example
                    \---project
                            CalculatorTests.java

Когда проект открылся, получил журнал событий о Unlinked Gradle project и нажал Import Gradle project

enter image description here enter image description here enter image description here

C:.
|   .gitignore
|   build-JITPACK.gradle
|   build-SNAPSHOT.gradle
|   build.gradle
|   gradlew
|   gradlew.bat
|   README.md
|
+---.gradle
|   +---4.8
|   |   +---fileChanges
|   |   |       last-build.bin
|   |   |
|   |   \---fileHashes
|   |           fileHashes.lock
|   |
|   \---vcsWorkingDirs
|           gc.properties
|
+---.idea
|   |   compiler.xml
|   |   gradle.xml
|   |   misc.xml
|   |   modules.xml
|   |   workspace.xml
|   |
|   +---libraries
|   |       gradle_wrapper.xml
|   |       Gradle__org_apiguardian_apiguardian_api_1_0_0.xml
|   |       Gradle__org_junit_jupiter_junit_jupiter_api_5_3_1.xml
|   |       Gradle__org_junit_jupiter_junit_jupiter_engine_5_3_1.xml
|   |       Gradle__org_junit_jupiter_junit_jupiter_params_5_3_1.xml
|   |       Gradle__org_junit_platform_junit_platform_commons_1_3_1.xml
|   |       Gradle__org_junit_platform_junit_platform_engine_1_3_1.xml
|   |       Gradle__org_opentest4j_opentest4j_1_1_1.xml
|   |
|   \---modules
|           junit5-jupiter-starter-gradle.iml
|           junit5-jupiter-starter-gradle_main.iml
|           junit5-jupiter-starter-gradle_test.iml
|
+---gradle
|   \---wrapper
|           gradle-wrapper.jar
|           gradle-wrapper.properties
|
\---src
    +---main
    |   |   main.iml
    |   |
    |   \---java
    |       \---com
    |           \---example
    |               \---project
    |                       Calculator.java
    |
    \---test
        |   test.iml
        |
        \---java
            \---com
                \---example
                    \---project
                            CalculatorTests.java

Построенный проект с использованием задачи Gradle: сборка

enter image description here

C:.
|   .gitignore
|   build-JITPACK.gradle
|   build-SNAPSHOT.gradle
|   build.gradle
|   gradlew
|   gradlew.bat
|   README.md
|
+---.gradle
|   +---4.8
|   |   +---fileChanges
|   |   |       last-build.bin
|   |   |
|   |   +---fileContent
|   |   |       annotation-processors.bin
|   |   |       fileContent.lock
|   |   |
|   |   +---fileHashes
|   |   |       fileHashes.bin
|   |   |       fileHashes.lock
|   |   |       resourceHashesCache.bin
|   |   |
|   |   \---taskHistory
|   |           taskHistory.bin
|   |           taskHistory.lock
|   |
|   +---buildOutputCleanup
|   |       buildOutputCleanup.lock
|   |       cache.properties
|   |       outputFiles.bin
|   |
|   \---vcsWorkingDirs
|           gc.properties
|
+---.idea
|   |   compiler.xml
|   |   gradle.xml
|   |   misc.xml
|   |   modules.xml
|   |   workspace.xml
|   |
|   +---libraries
|   |       gradle_wrapper.xml
|   |       Gradle__org_apiguardian_apiguardian_api_1_0_0.xml
|   |       Gradle__org_junit_jupiter_junit_jupiter_api_5_3_1.xml
|   |       Gradle__org_junit_jupiter_junit_jupiter_engine_5_3_1.xml
|   |       Gradle__org_junit_jupiter_junit_jupiter_params_5_3_1.xml
|   |       Gradle__org_junit_platform_junit_platform_commons_1_3_1.xml
|   |       Gradle__org_junit_platform_junit_platform_engine_1_3_1.xml
|   |       Gradle__org_opentest4j_opentest4j_1_1_1.xml
|   |
|   \---modules
|           junit5-jupiter-starter-gradle.iml
|           junit5-jupiter-starter-gradle_main.iml
|           junit5-jupiter-starter-gradle_test.iml
|
+---build
|   +---classes
|   |   \---java
|   |       +---main
|   |       |   \---com
|   |       |       \---example
|   |       |           \---project
|   |       |                   Calculator.class
|   |       |
|   |       \---test
|   |           \---com
|   |               \---example
|   |                   \---project
|   |                           CalculatorTests.class
|   |
|   +---libs
|   |       junit5-jupiter-starter-gradle.jar
|   |
|   +---reports
|   |   \---tests
|   |       \---test
|   |           |   index.html
|   |           |
|   |           +---classes
|   |           |       com.example.project.CalculatorTests.html
|   |           |
|   |           +---css
|   |           |       base-style.css
|   |           |       style.css
|   |           |
|   |           +---js
|   |           |       report.js
|   |           |
|   |           \---packages
|   |                   com.example.project.html
|   |
|   +---test-results
|   |   \---test
|   |       |   TEST-com.example.project.CalculatorTests.xml
|   |       |
|   |       \---binary
|   |               output.bin
|   |               output.bin.idx
|   |               results.bin
|   |
|   \---tmp
|       +---compileJava
|       +---compileTestJava
|       \---jar
|               MANIFEST.MF
|
+---gradle
|   \---wrapper
|           gradle-wrapper.jar
|           gradle-wrapper.properties
|
\---src
    +---main
    |   |   main.iml
    |   |
    |   \---java
    |       \---com
    |           \---example
    |               \---project
    |                       Calculator.java
    |
    \---test
        |   test.iml
        |
        \---java
            \---com
                \---example
                    \---project
                            CalculatorTests.java

Файлы, кэшированные Gradle

C:\Users\Eric\.gradle\caches>tree modules-2 /A /F

C:\USERS\ERIC\.GRADLE\CACHES\MODULES-2
|   modules-2.lock
|
+---files-2.1
|   +---org.apiguardian
|   |   \---apiguardian-api
|   |       \---1.0.0
|   |           +---2c4e5835b7580f2696be7ee1402f4309b3665cf4
|   |           |       apiguardian-api-1.0.0.pom
|   |           |
|   |           +---3ef5276905e36f4d8055fe3cb0bdcc7503ffc85d
|   |           |       apiguardian-api-1.0.0.jar
|   |           |
|   |           \---777508fa9f3e03cafb3c1fb2eba3dca317f4b1ee
|   |                   apiguardian-api-1.0.0-sources.jar
|   |
|   +---org.junit.jupiter
|   |   +---junit-jupiter-api
|   |   |   \---5.3.1
|   |   |       +---39e68334cdee95898567f54d7358a6926262dde6
|   |   |       |       junit-jupiter-api-5.3.1.pom
|   |   |       |
|   |   |       +---a7e97eac2784395cb991403f9641b042ad972941
|   |   |       |       junit-jupiter-api-5.3.1.jar
|   |   |       |
|   |   |       \---b03f607c0822a283c972e37eaeacb00dc3a3c2e7
|   |   |               junit-jupiter-api-5.3.1-sources.jar
|   |   |
|   |   +---junit-jupiter-engine
|   |   |   \---5.3.1
|   |   |       +---c769957170b2240854d6da6c6706dcc2a281542f
|   |   |       |       junit-jupiter-engine-5.3.1-sources.jar
|   |   |       |
|   |   |       +---e0b10da40cae904d69b805021bc1f5d64994aa93
|   |   |       |       junit-jupiter-engine-5.3.1.pom
|   |   |       |
|   |   |       \---e2676b1786c57a80eb98f5bebd51a3d05e228c40
|   |   |               junit-jupiter-engine-5.3.1.jar
|   |   |
|   |   \---junit-jupiter-params
|   |       \---5.3.1
|   |           +---9dfac3fbd6768974fc0c142304a3e90ba713b2a8
|   |           |       junit-jupiter-params-5.3.1.jar
|   |           |
|   |           +---bc4eb2ef307286fcd45551d4da397518c2e15394
|   |           |       junit-jupiter-params-5.3.1-sources.jar
|   |           |
|   |           \---cf0c573f1a0446afb8d544a5fd53dae4bb433b79
|   |                   junit-jupiter-params-5.3.1.pom
|   |
|   +---org.junit.platform
|   |   +---junit-platform-commons
|   |   |   \---1.3.1
|   |   |       +---297bb35bca3d229c5e6edbffd22de7b5ad4cf430
|   |   |       |       junit-platform-commons-1.3.1-sources.jar
|   |   |       |
|   |   |       +---67b7edddfac1935e6e6d9b58d7c7df6db59b1d39
|   |   |       |       junit-platform-commons-1.3.1.jar
|   |   |       |
|   |   |       \---c47714600308339d4b5e203974ebd2ce50eb2109
|   |   |               junit-platform-commons-1.3.1.pom
|   |   |
|   |   \---junit-platform-engine
|   |       \---1.3.1
|   |           +---3ee68a06bbdab157dd260e2095c356481d6cd172
|   |           |       junit-platform-engine-1.3.1.jar
|   |           |
|   |           +---db2bf7e793fec08aed5c588eb495595e4acc9fc7
|   |           |       junit-platform-engine-1.3.1.pom
|   |           |
|   |           \---effe038ffcf21f6988e78b12119ca456d7d144fd
|   |                   junit-platform-engine-1.3.1-sources.jar
|   |
|   \---org.opentest4j
|       \---opentest4j
|           \---1.1.1
|               +---6554a839d3c3f1c77c593498a3ae4b692878946a
|               |       opentest4j-1.1.1.pom
|               |
|               +---88a3a2cb15c413565462cea99f201b67bc6d2f10
|               |       opentest4j-1.1.1-sources.jar
|               |
|               \---efd9f971e91074491ea55b19f67b13470cf4fcdd
|                       opentest4j-1.1.1.jar
|
\---metadata-2.58
    |   module-artifact.bin
    |   module-artifacts.bin
    |   module-metadata.bin
    |   resource-at-url.bin
    |
    \---descriptors
        +---org.apiguardian
        |   \---apiguardian-api
        |       \---1.0.0
        |           \---f8e6315c37eb56998f7a5ba08e30db71
        |                   descriptor.bin
        |
        +---org.junit.jupiter
        |   +---junit-jupiter-api
        |   |   \---5.3.1
        |   |       \---f8e6315c37eb56998f7a5ba08e30db71
        |   |               descriptor.bin
        |   |
        |   +---junit-jupiter-engine
        |   |   \---5.3.1
        |   |       \---f8e6315c37eb56998f7a5ba08e30db71
        |   |               descriptor.bin
        |   |
        |   \---junit-jupiter-params
        |       \---5.3.1
        |           \---f8e6315c37eb56998f7a5ba08e30db71
        |                   descriptor.bin
        |
        +---org.junit.platform
        |   +---junit-platform-commons
        |   |   \---1.3.1
        |   |       \---f8e6315c37eb56998f7a5ba08e30db71
        |   |               descriptor.bin
        |   |
        |   \---junit-platform-engine
        |       \---1.3.1
        |           \---f8e6315c37eb56998f7a5ba08e30db71
        |                   descriptor.bin
        |
        \---org.opentest4j
            \---opentest4j
                \---1.1.1
                    \---f8e6315c37eb56998f7a5ba08e30db71
                            descriptor.bin

Закрытая панель справа
Использование Project панели слева
Разверните каталоги, чтобы отобразить test/java/com.example.project/CalculatorTests.java
Doubleнажал CalculatorTests.java

enter image description here

Чтобы исправить первую ошибку, наведите курсор на Assertions в строке 13 и нажмите ALT+Enter
Нажмите первый вариант

Add library 'Gradle: org.junit.jupiter:junit-jupiter-api:5.3.1' to classpath  

Чтобы исправить вторую ошибку, наведите курсор на ParameterizedTest в строке 17 и нажмите ALT+Enter
Нажмите первую опцию

Add library 'Gradle: org.junit.jupiter:junit-jupiter-params:5.3.1' to classpath  

Чтобы исправить третью ошибку, наведите курсор на Calculator в строке 26 и нажмите ALT+Enter
Нажмите первый вариант

Add dependency on module 'main' 

enter image description here

enter image description here

Затем на вкладке Gradle запускается verification -> test, которая успешно вернула ожидаемыйрезультаты

Testing started at 2:56 PM ...
2:56:07 PM: Executing task 'test'...

> Task :compileJava
> Task :processResources NO-SOURCE
> Task :classes
> Task :compileTestJava
> Task :processTestResources NO-SOURCE
> Task :testClasses
> Task :test
com.example.project.CalculatorTests > addsTwoNumbers() PASSED
com.example.project.CalculatorTests > add(int, int, int)[1] PASSED
com.example.project.CalculatorTests > add(int, int, int)[2] PASSED
com.example.project.CalculatorTests > add(int, int, int)[3] PASSED
com.example.project.CalculatorTests > add(int, int, int)[4] PASSED
BUILD SUCCESSFUL in 6s
3 actionable tasks: 3 executed
2:56:13 PM: Task execution finished 'test'.

enter image description here

enter image description here

Затем при запуске отдельного теста в CalculatorTest.java пощелкнув зеленую стрелку в левом поле и выбрав Run 'addsTowNumbers()' получено:

Exception in thread "main" java.lang.NoClassDefFoundError:  
   org/junit/platform/launcher/TestExecutionListener

enter image description here

enter image description here

РЕДАКТИРОВАТЬ

Теперь индивидуальные тестовые работы

Вчера я сохранил проект и затем загрузил Maven семпл , который также не удался.Когда я проснулся сегодня, я решил еще немного повозиться с образцом Gradle.Когда я нажал на стрелку в левом поле для одного теста, на этот раз это сработало.В настоящее время я могу думать только о том, почему он работает сейчас, в том, что при запуске образца Maven что-то было изменено или что-то изменилось при закрытии и повторном открытии проекта.

CalculatorTest.java

/*
 * Copyright 2015-2018 the original author or authors.
 *
 * All rights reserved. This program and the accompanying materials are
 * made available under the terms of the Eclipse Public License v2.0 which
 * accompanies this distribution and is available at
 *
 * http://www.eclipse.org/legal/epl-v20.html
 */

package com.example.project;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

class CalculatorTests {

    @Test
    @DisplayName("1 + 1 = 2")
    void addsTwoNumbers() {
        Calculator calculator = new Calculator();
        assertEquals(2, calculator.add(1, 1), "1 + 1 should equal 2");
    }

    @ParameterizedTest(name = "{0} + {1} = {2}")
    @CsvSource({
            "0,    1,   1",
            "1,    2,   3",
            "49,  51, 100",
            "1,  100, 101"
    })
    void add(int first, int second, int expectedResult) {
        Calculator calculator = new Calculator();
        assertEquals(expectedResult, calculator.add(first, second),
                () -> first + " + " + second + " should equal " + expectedResult);
    }
}

Результат проверки работоспособности для строки 20: class CalculatorTests {

enter image description here

enter image description here

Результат проверки работоспособности для строки 24: void addsTwoNumbers() {

enter image description here

enter image description here

Результат выполнениятест для строки 36: void add(int first, int second, int expectedResult) {

enter image description here

enter image description here

Результат выполнения задачи Gradle:test

enter image description here

enter image description here

Выбранный тест имеет значение

Тамдве конфигурации запуска / отладки созданы для CalculatorTests

  1. CalculatorTests имеет Use classpath of module: с test и выдает исключение.
  2. CalculatorTests (1) имеет Use classpath of module: с junit5-jupiter-starter-gradle_test и успешно завершается.

1 Ответ

0 голосов
/ 24 октября 2018

IntelliJ IDEA (для этого вопроса Community 2018.2) иногда генерирует неверную конфигурацию для теста JUnit5.

Для просмотра конфигурации прогона в меню выберите: Выполнить -> Редактировать конфигурации ...

enter image description here

Два разных результата

В этом примере есть две конфигурации запуска для Class CalculatorTests, сгенерированных IntelliJ IDEA.

1.

Первая конфигурация создает исключение:

Exception in thread "main" java.lang.NoClassDefFoundError:   
  org/junit/platform/launcher/TestExecutionListener

enter image description here

enter image description here

2.

Вторая конфигурация работает правильно

enter image description here

enter image description here

Сводка

Таким образом, при запуске отдельного теста нажмите зеленую стрелку в левом поле и результаты теста станут исключением.Проверьте, какая конфигурация на самом деле работает

enter image description here

, а затем проверьте детали конфигурации для теста

enter image description here

, чтобы убедиться, что Use classpath or module установлен правильно.

...