Java.lang.NoSuchMethodError: org.junit.platform.launcher.Launcher.execute

Я пытаюсь запустить следующий пример модульного теста

class ExampleUnitTest {

    @Test
    fun addition_is_Correct() {
        assertEquals(4, (2 + 2).toLong())
    }

}

но я получаю следующее исключение

Exception in thread "main" java.lang.NoSuchMethodError: org.junit.platform.launcher.Launcher.execute(Lorg/junit/platform/launcher/LauncherDiscoveryRequest;)V
    at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:61)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)

хотя я обновил все файлы build.gradle зависимостей Junit, как показано ниже

testImplementation 'junit:junit:4.12'
testImplementation 'org.jetbrains.spek:spek-api:1.1.5'
testImplementation 'org.jetbrains.spek:spek-junit-platform-engine:1.1.5'
testImplementation 'org.junit.platform:junit-platform-launcher:1.0.0'
testImplementation 'org.junit.platform:junit-platform-runner:1.0.0'
testImplementation 'org.junit.vintage:junit-vintage-engine:4.12.3'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.0.0'
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.0.0'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.0.0'

есть ли решение для этого?

Я не вижу в этом проблемы, не могли бы вы поделиться еще немного.

Devesh Chanchlani 01.06.2018 14:04
7
1
9 225
3

Ответы 3

TL; DR понижает рейтинг ваших зависимостей в pom.xml в соответствии с версиями, которые изначально поставлялись с IDEA, найденной в IDEA_INSTALLATION_HOME/plugins/junit/lib


Более длинная версия:

Предположим, вы используете версию Intellij IDEA старше 2017.3; тогда у вас есть эти варианты, которые были даны в качестве официального ответа на другой вопрос SO: https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000791190-Intellij-does-not-run-Junit5-tests

Вставьте его сюда, чтобы сделать его более заметным:

IDE has compilation dependency on the old junit 5 launcher jar and it is not compatible with current released version. So you have a choice to update IDE so it will be compatible with the junit version you use or to downgrade the junit version (check what version was bundled in IDEA_INSTALLATION_HOME/plugins/junit/lib). 2017.1 had only experimental support for junit 5 as junit 5 was not released yet at that time. Sorry for the inconvenience.

Итак, перейдите в папку IDEA_INSTALLATION_HOME/plugins/junit/lib и проверьте версии в именах файлов jar, найденных там. Должно получиться примерно так:

user@comp:IDEA_INSTALLATION_HOME/plugins/junit/lib]$ ls
idea-junit.jar                        junit-platform-runner-1.0.0-M4.jar
junit5-rt.jar                         junit-platform-suite-api-1.0.0-M4.jar 
junit-jupiter-api-5.0.0-M4.jar        junit-rt.jar
junit-jupiter-engine-5.0.0-M4.jar     junit-vintage-engine-4.12.0-M4.jar
junit-platform-commons-1.0.0-M4.jar   opentest4j-1.0.0-M2.jar
junit-platform-engine-1.0.0-M4.jar    resources_en.jar
junit-platform-launcher-1.0.0-M4.jar

Теперь используйте суффикс версии файла junit- в настройке pom.xmlproperties вашего модуля:

<project>
...
    <properties>
        <junit.jupiter.version>5.0.0-M4</junit.jupiter.version>
        <junit.platform.version>1.0.0-M4</junit.platform.version>
        <junit.vintage.version>4.12.0-M4</junit.vintage.version>
        ...
    </properties>
...
</project>

Я могу подтвердить, что после перехода на более старые версии я мог запускать тестовые классы, которые использовали пакет org.junit.jupiter. До этого я постоянно получал NoSuchMethodError, когда пытался запустить тесты.

Ну, я использую eclipse, и я столкнулся с проблемой.

Árpád Magosányi 18.08.2019 07:16

@ ÁrpádMagosányi Я считаю, что это должен быть аналогичный процесс с Eclipse, если вы используете Maven. Я бы сказал, перейдите в эквивалент папки зависимостей Eclipse и получите версии там. У меня нет Eclipse, поэтому я не знаю точной процедуры, но сравните мое решение, решение Christian Nuss и hd84335, возможно, это вам поможет.

rexxar 29.07.2020 13:24

Насколько я помню, решение для меня было тем, которое дал @ hd84335.

Árpád Magosányi 30.07.2020 18:08

Я испытал нечто подобное в VSCode и подумал, что поделюсь своим результатом.

Я использовал неправильную смесь тестовых зависимостей в моем pom.xml, которую я видел, выполняя mvn dependency:tree. Удаление определенных зависимостей junit-jupiter и простое использование org.junit.jupiter:junit-jupiter заставило все снова работать (как выполнение теста в VSCode, так и mvn test в командной строке).

В конечном итоге единственные зависимости Юпитера, которые у меня есть в моем pom.xml, это:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.6.0</version>
    <scope>test</scope>
</dependency>

Источник: https://github.com/junit-team/junit5/issues/1773

Обновление версии junit-platform-launcher с 1.0.0 до 1.4.x все еще может потребоваться для того, чтобы иметь возможность запускать тесты junit5:

<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-launcher</artifactId>
    <version>1.4.2</version>
    <scope>test</scope>
</dependency>

Я испытал очень похожую проблему в затмение и нашел решение здесь

Надеюсь это поможет !

Спасибо, у меня сработало, используя Eclipse

Minh Kha 03.03.2021 10:27

Другие вопросы по теме