无法解析导入org.springframework.test.context.junit4.SpringJUnit4ClassRunner

时间:2015-05-28 17:31:45

标签: java spring maven spring-mvc springjunit4classrunner

我是Spring的新手,这也是我在StackOverflow上的第一个问题,所以我将尝试尽可能地理解这一点。

我正在尝试使用Spring和Maven在this教程上创建一个Web服务客户端:我收到此错误:导入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>

我在StackOverflow中尝试过其他一些解决方案,但我无法让它工作。

感谢。

7 个答案:

答案 0 :(得分:22)

您需要在spring-boot-starter-test上添加依赖项:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>

答案 1 :(得分:11)

现在,如果您使用的是最新的spring-boot,1.5.2 RELEASE,@ SpringApplicationConfiguration不再可用,您必须使用@SpringBootTest。参考这里(@ spring boot starter test in Spring Boot

答案 2 :(得分:8)

摇篮

在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语句

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

允许您使用注释:

@RunWith(SpringJUnit4ClassRunner.class)
public class MyAppTest {

}

答案 3 :(得分:1)

我知道这已经很晚了,但是我遇到了同样的问题,发现能够用两种方法解决它。

  1. 我能够删除 test 标签,并删除了限制
  2. 我在进行测试时遇到intellij无法正确处理它的问题,因此我确保将其标记为测试根目录,将其从绿色->灰色->更改回绿色测试根目录,这解决了我的问题问题。

答案 4 :(得分:0)

有时maven开始下载依赖项,但还没有结束。 转到您的.m2文件夹并输入:

'c'

此命令将向您显示每个带有标签“正在进行中”的文件,这些文件是丢失或未完成的文件。

删除文件夹,然后尝试再次更新依赖项。

答案 5 :(得分:0)

只是改善情况。

我设法像这样修复它:

之前,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>

答案 6 :(得分:0)

如果您没有使用 spring boot,而只使用 spring 框架,您应该为 spring-test 添加依赖项。

<!-- 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-test 的最新版本,并进行相应更新。

如果您使用的是 spring-boot 项目而不是添加 spring boot 依赖项,如果您不使用 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>