Junit 5 с Mockito java .lang.NoSuchMethodError org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryListener () - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь перейти с Junit 4 на Junit 5, поэтому мы используем Mockito в наших тестах, поэтому для замены Run нужно добавить @ExtendWith(MockitoExtension::class), и мы добавили это в зависимости

testImplementation("org.mockito:mockito-junit-jupiter:3.3.3")

и у нас это в gradle мы добавили это

testImplementation("org.springframework.boot:spring-boot-starter-test") {
    exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
    exclude(group = "junit", module = "junit")
}
testImplementation("org.junit.jupiter:junit-jupiter:5.6.2")

и после того, как мы запустили этот тестовый класс с Mockito, мы получили эту ошибку

org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-vintage' failed to discover tests
java.lang.NoSuchMethodError: 'org.junit.platform.engine.EngineDiscoveryListener org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryListener()'
at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:88)
at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.run(EngineDiscoveryRequestResolution.java:82)
at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.resolve(EngineDiscoveryRequestResolver.java:113)
at org.junit.vintage.engine.discovery.VintageDiscoverer.discover(VintageDiscoverer.java:44)
at org.junit.vintage.engine.VintageTestEngine.discover(VintageTestEngine.java:63)
at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:168)
at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:155)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)

Я видел это вопрос (JUnit 5 и Mockito) и проверенный ответ, но не сработал и у меня

Обновление 1

вот и весь build.gradle

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
  id("org.springframework.boot") version "2.1.7.RELEASE"
  id("io.spring.dependency-management") version "1.0.8.RELEASE"
  kotlin("jvm") version "1.3.50"
  kotlin("plugin.spring") version "1.3.50"
}

group = "-"
version = System.getenv("VERSION") ?: "local"
java.sourceCompatibility = JavaVersion.VERSION_12

repositories {
  mavenCentral()
}

dependencies {
  implementation("org.springframework.boot:spring-boot-starter-web")
  .
  .
  .
  .


  testImplementation("org.junit.jupiter:junit-jupiter:5.6.2")

  testImplementation("org.springframework.boot:spring-boot-starter-test") {
    exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
    exclude(group = "junit", module = "junit")
  }
  testImplementation("org.mockito:mockito-junit-jupiter:3.3.3")


}

1 Ответ

1 голос
/ 29 апреля 2020

Насколько я вижу, у вашего build.gradle есть несколько проблем:

  1. Версия Mockito не совместима с версией junit -> Пожалуйста, удалите явную версию в зависимости от mockito
  2. Моя IDE также жаловалась на использование kotlin() в plugins. -> Пожалуйста, измените на id
  3. Собственная поддержка junit отсутствует -> Пожалуйста, включите его
  4. Моя IDE также жаловалась на то, как вы исключили зависимости junit 4

В следующем build.gradle я исправил эти проблемы:

plugins {
    id 'org.springframework.boot' version '2.1.7.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.3.50'
}

group = "-"
version = System.getenv("VERSION") ?: "local"
java.sourceCompatibility = JavaVersion.VERSION_12

repositories {
    mavenCentral()
}

test {
    useJUnitPlatform()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")

    testImplementation("org.junit.jupiter:junit-jupiter:5.6.2")

    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude group : "org.junit.vintage", module : "junit-vintage-engine"
        exclude group : "junit", module : "junit"
    }
    testImplementation("org.mockito:mockito-junit-jupiter")
}
...