1、产生的问题:
maven项目执行单元测试可以正常执行,但是执行maven命令test,则报一下异常:
org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile (default-testCompile) on project support: Compilation failure: Compilation failure: [ERROR] E:workspacesupportsrc estjavacom estspringsupportTestSpringContextHolder.java:[7,16] 错误: 程序包org.junit不存在 [ERROR] E:workspacesupportsrc estjavacom estspringsupportTestSpringContextHolder.java:[16,2] 错误: 找不到符号 [ERROR] 符号: 类 Test [ERROR] 位置: 类 TestSpringContextHolder [ERROR] E:workspacesupportsrc estjavacom estspringsupportTestSpringContextHolder.java:[29,2] 错误: 找不到符号 [ERROR] 符号: 类 Before [ERROR] 位置: 类 TestSpringContextHolder [ERROR] E:workspacesupportsrc estjavacom estspringsupportTestSpringContextHolder.java:[43,5] 错误: 找不到符号
2、产生上述错误的原因:
1)、maven项目,单元测试和运行使用不同的classpath,测试使用test-classpath,运行使用classpath;
2)、创建maven项目使用junit默认的版本为3.8.1,它使用的是编程的方式,即使maven dependencies目录引入了junit,但也无法使用,只能通过build path添加junit支持
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency>
3、解决方案:
将junit的版本提高到4.x,配置代码如下:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- 默认的版本为3.8.1,修改为4.x,因为3.x使用的为编程的方式,4.x为注解的形式。 -->
<version>4.11</version>
<scope>test</scope>
</dependency>
4、补充:我上面贴出的异常目录位于。。。src estjava。。。,不是。。。srcmainjava。。。,处理方式如上,如果异常发生在main目录而不是test目录,同时junit版本是4.x,解决方案则将scope属性去掉:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- 默认的版本为3.8.1,修改为4.x,因为3.x使用的为编程的方式,4.x为注解的形式。 -->
<version>4.11</version>
<!-- 去掉scope作用域,使用默认的compile,编译、测试、运行都有效的作用域 -->
<!--<scope>test</scope>-->
</dependency>
解决思路参考:https://blog.csdn.net/javaloveiphone/article/details/52163396