Импорт org.springframework.test.context.junit4.SpringJUnit4ClassRunner не может быть разрешен
Я новичок в Spring, и это также мой самый первый вопрос по Stackru, поэтому я постараюсь сделать это как можно более понятным.
Я пытаюсь сделать клиент веб-службы с использованием Spring и Maven в этом учебном пособии: и я получаю эту ошибку: импорт org.springframework.test.context.junit4 не может быть разрешен
Вот мой код:
package demo;
import hello.WsClientApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; //this won't import
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = WsClientApplication.class)
public class WsClientApplicationTests {
@Test
public void contextLoads() {
}
}
Вот мой pom.xml
в случае, если вам это нужно.
<?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>org.springframework</groupId>
<artifactId>gs-consuming-web-service</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- tag::wsdl[] -->
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.12.3</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<generatePackage>hello.wsdl</generatePackage>
<schemas>
<schema>
<url>http://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl</url>
</schema>
</schemas>
</configuration>
</plugin>
<!-- end::wsdl[] -->
</plugins>
</build>
</project>
Я пробовал некоторые другие решения в Stackru, но не могу заставить его работать.
Благодарю.
7 ответов
Вам нужно добавить зависимость от spring-boot-starter-test
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
Теперь, если вы используете последнюю загрузочную пружину, 1.5.2 RELEASE, @SpringApplicationConfiguration больше не доступен, вместо этого вы должны использовать @SpringBootTest. Ссылка здесь (@ стартовый тест весенней загрузки в Spring Boot)
Gradle
В Gradle это будет сделано путем добавления
testCompile("org.springframework.boot:spring-boot-starter-test")
в блок зависимостей как в:
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("junit:junit")
testCompile("org.springframework.boot:spring-boot-starter-test")
}
После этого должна быть возможность написать оператор импорта в верхней части вашего класса.
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
Позволяет вам использовать аннотацию:
@RunWith(SpringJUnit4ClassRunner.class)
public class MyAppTest {
}
Просто чтобы улучшить ситуацию.
Мне удалось это исправить вот так:
раньше Spring boot initializr создавал зависимость от spring-boot-starter-test, но с исключением, например:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
Eclipse обвинил аннотацию @Runwith в Junit 4, поэтому логично было удалить исключение.
Окончательная зависимость POM:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
Я знаю, что на этот вопрос ответили довольно поздно, но у меня была та же проблема, и я обнаружил, что смог исправить это двумя способами.
- Мне удалось удалить теги
test scope>, и это сняло ограничение - У меня была проблема с неправильной обработкой intellij при выполнении тестов, поэтому я убедился, что она помечена как test-root, я изменил ее с зеленого -> серый -> обратно на зеленый test-root, и это решило мою проблему.
Иногда maven начинает загружать зависимости и не заканчивает. Перейдите в папку.m2 и введите:
find . -name *progre*
эта команда покажет вам каждый файл с тегом "in-progess", которые являются файлами, отсутствующими или не завершенными.
удалите папку и попробуйте обновить зависимости снова.
В случае, если вы не используете весеннюю загрузку, а только весеннюю структуру, вы должны добавить зависимость для весеннего теста.
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>2.5</version>
<scope>test</scope>
</dependency>
Вы можете проверить последнюю версию для весеннего теста с помощью mvn и соответствующим образом обновить.
Если вы используете проект spring-boot, чем добавляете зависимость загрузки spring, если вы не используете spring-boot, нижеприведенное будет работать, но не рекомендуется.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<version>2.4.1</version>
</dependency>
ПРИМЕЧАНИЕ. Если вы используете проект spring-boot, добавление
<version>
не будет необходимости.