Импорт 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>

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

  1. Мне удалось удалить теги test , и это сняло ограничение
  2. У меня была проблема с неправильной обработкой 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>не будет необходимости.

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