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'
есть ли решение для этого?
1 ответ
TL;DR понизить ваши зависимости в pom.xml
в соответствии с версиями, которые изначально поставлялись вместе с IDEA в IDEA_INSTALLATION_HOME/plugins/junit/lib
Более длинная версия:
Предположим, вы используете версию Intellij IDEA старше 2017 года; тогда у вас есть такой выбор, который был дан в качестве официального ответа на другой вопрос SO: https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000791190-Intellij-does-not-run-Junit5-tests - тесты
Вставьте его здесь, чтобы сделать его более заметным:
Среда IDE зависит от компиляции старого jar-файла запуска junit 5 и не совместима с текущей выпущенной версией. Таким образом, у вас есть возможность обновить IDE, чтобы она была совместима с используемой вами версией junit, или чтобы понизить версию junit (проверьте, какая версия была включена в IDEA_INSTALLATION_HOME/plugins/junit/lib). У 2017.1 была только экспериментальная поддержка для junit 5, так как junit 5 еще не была выпущена. Приносим извинения за неудобства.
Итак, иди в свой 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.xml
properties
настроить:
<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
при попытке запустить тесты.
Обновить 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 и нашел решение здесь
Надеюсь это поможет!
Я испытал нечто подобное в 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>