无法运行测试智能J - Spring 项目 - 错误:java.lang.NoSuchMethodError



我正在研究宁静的应用程序。一开始我使用的是TDD方法。在第二阶段,我切换到选项:在实现方法后进行测试。但是我无法运行测试。错误类型:

Exception in thread "main" java.lang.NoSuchMethodError: org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()Ljava/lang/ClassLoader;
at org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry.loadTestEngines(ServiceLoaderTestEngineRegistry.java:30)
at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:53)
at com.intellij.junit5.JUnit5IdeaTestRunner.createListeners(JUnit5IdeaTestRunner.java:39)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:49)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Process finished with exit code 1
Empty test suite.

聚甲醛文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.przemyslawostrouch</groupId>
<artifactId>weatherapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>weatherapp</name>
<description>Web project will aviation weather and Notam informations</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.assertj/assertj-core -->
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>1.2.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>RELEASE</version>
</dependency><!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20170516</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-io -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.1</version>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.squareup.retrofit/retrofit -->
<dependency>
<groupId>com.squareup.retrofit</groupId>
<artifactId>retrofit</artifactId>
<version>1.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

测试类示例:

package com.przemyslawostrouch.parsers;
import com.przemyslawostrouch.domain.Airport;
import com.przemyslawostrouch.domain.City;
import com.przemyslawostrouch.domain.CityAirportDistance;
import com.przemyslawostrouch.logic.NearestAirport;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;

/**
* Created by Przemek on 2017-06-24.
*/
class NearestAirportTest {
private NearestAirport nearestAirport;
private City katowiceCity;
private Airport katowiceAirport;
private Airport frankfurtAirport;
private Airport pulkovoAirport;
private CityAirportDistance cityAirportDistance;
private CityAirportDistance cityAirportDistance1;
private CityAirportDistance cityAirportDistance2;
private String searchedCityUpperCase;
public void setup() {

searchedCityUpperCase = "Katowice";
nearestAirport = new NearestAirport();
katowiceCity = City.builder()
.name("Katowice")
.latitude(50.26489189999999)
.longitude(19.0237815)
.build();
katowiceAirport = Airport.builder()
.name("Muchowiec Airport")
.longitude(19.03420066833496)
.latitude(50.23809814453125)
.build();
frankfurtAirport = Airport.builder()
.name("Frankfurt am Main International Airport")
.longitude(8.5705556)
.latitude(50.0333333)
.build();
pulkovoAirport = Airport.builder()
.name("Pulkovo Airport")
.longitude(30.262500762939453)
.latitude(59.80030059814453)
.build();
cityAirportDistance = CityAirportDistance.builder()
.airportName(katowiceAirport.getName())
.searchedCityName(searchedCityUpperCase)
.distanceBetweenSearchedCityAndAirport(1.6565764398773335)
.build();
cityAirportDistance1 = CityAirportDistance.builder()
.airportName(frankfurtAirport.getName())
.searchedCityName(searchedCityUpperCase)
.distanceBetweenSearchedCityAndAirport(401.81041784523916)
.build();
cityAirportDistance2 = CityAirportDistance.builder()
.airportName(pulkovoAirport.getName())
.searchedCityName(searchedCityUpperCase)
.distanceBetweenSearchedCityAndAirport(688.4011751978946)
.build();
}
@Test
void isNearestAirportNotNull() {
setup();
assertThat(nearestAirport).isNotNull();
}
@Test
void whenTypedCityReturnCityWithFirstLetterUpperCase() {
setup();
String searchedCity = "katowice";
assertThat(nearestAirport.searchedCityToUpperCase(searchedCity)).isEqualTo("Katowice");
}

@Test
void forGivenCityAndAerodromeCoordinatesReturnDistance() {
setup();
//City Gdansk
City gdanskCity = City.builder()
.name("Gdansk")
.latitude(54.35202520000001)
.longitude(18.6466384)
.build();
Airport gdanskAirport = Airport.builder()
.name("Gdańsk Lech Wałęsa Airport")
.latitude(54.377601623535156)
.longitude(18.46619987487793)
.build();
assertThat(nearestAirport.calculateDistance(gdanskCity, gdanskAirport)).isEqualTo(6.491638306515884);
}
@Test
void forGivenCityNameCalculateDistanceBetweenAllAirports() {
setup();
List<Airport> listOfAirportsForTest = new ArrayList<>();
listOfAirportsForTest.add(katowiceAirport);
listOfAirportsForTest.add(frankfurtAirport);
listOfAirportsForTest.add(pulkovoAirport);

assertThat(nearestAirport.calculateDistanceBetweenAllAirportsAndSelectedCity(listOfAirportsForTest, katowiceCity))
.contains(cityAirportDistance, cityAirportDistance1, cityAirportDistance2);
}
@Test
void sortListDistancesAndReturnNearestAirport() {
setup();
List<CityAirportDistance> cityAirportDistancesListTest = new ArrayList<>();

cityAirportDistancesListTest.add(cityAirportDistance);
cityAirportDistancesListTest.add(cityAirportDistance1);
cityAirportDistancesListTest.add(cityAirportDistance2);
assertThat(nearestAirport.createListOfNearestAirports(katowiceCity)).contains(cityAirportDistancesListTest.get(0)
, cityAirportDistancesListTest.get(1)
, cityAirportDistancesListTest.get(2));
}

我尝试更改依赖项,删除这些测试并编写另一个测试,但它不起作用。 我从未遇到过此错误,无法在此项目中运行任何测试。我在堆栈溢出和类似页面上找不到此问题的解决方案。如果您需要任何补充信息,请询问,感谢您的帮助

答案在你的pom.xml文件中。如果你看一下控制台输出,你会发现IntelliJ IDEA正在尝试使用JUnit5运行器:

at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:43)

根据您的pom.xml文件,您希望使用JUnit:4.12.下一步是查找导致此冲突的依赖项。比较pom.xml中列出的所有依赖项,您可以找到junit-jupiter-api

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>RELEASE</version>
</dependency>

此模块专为 JUnit5 - https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api

还要更正测试类中@Test注释的导入 - 您正在从 jupiter api 导入一个注释。

编辑:最后一件事。当你遇到类似的问题时(例如,classloader抱怨不存在的方法引用(,使用Maven的依赖插件总是一个好的起点(https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html(。它将帮助您找到导致冲突的依赖关系。

即使对于使用 IntelliJ 8 年左右的人来说,这也是一个噩梦般的问题。Maven 构建很干净,但不知何故,IntelliJ 在运行时使用了旧的缓存依赖项。

我必须重新导入每个子模块(我有几个嵌套的子模块(才能使其正常工作。右键单击项目并选择Maven->重新导入

以下是我失败的尝试/调试,以防万一人们没有尝试过。希望其中一些可以帮助其他人。

  1. mvn clean -Dtest=V1RequestMapperTest test所以从命令行测试工作正常,所以 IntelliJ 出了点问题
  2. 使缓存失效
  3. 使缓存失效并重新启动
  4. 从 .m2 文件夹中删除了有问题的依赖项以带来新的

相关内容

最新更新