java配置junit后idear打不开_使用IDE的JUnit测试正常但使用mvn test失败的解决方法

经常会遇到一个问题,在Eclipse中执行JUnit测试是正常的,但使用Mave的test命令测试是失败的。在Maven中执行测试是使用Surefire插件进行的,所以需要在pom.xml文件中对Surefire插件进行设置。

首先对Surefire插件进行如下设置,基本上可以解决大多数这个问题:

org.apache.maven.plugins

maven-surefire-plugin

2.12

always

Surfire 2.14以上版本,forkMode配置项被废弃,使用下面的配置进行替代:

org.apache.maven.plugins

maven-surefire-plugin

2.19.1

false

1

昨天我执行Spring Dao的测试,中间使用jdbc:initialize-database通过自动导入sql文件的方式初始化数据库的数据,因为文件中有中文出现了乱码,造成初始化失败。另外,默认情况下会发现执行mvn test命令的结果里面包含有很多乱码,可以在argLine中指定文件的编码。偶尔也会有执行mvn test造成内存溢出的错误,也可以在argLine中进行配置,内容如下:

org.apache.maven.plugins

maven-surefire-plugin

2.19.1

false

1

-Xmx1024m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8 -Xverify:none

其实Eclipse下面的JUnit和mvn test的环境有很多是不一样的,比如执行JUnit正常,但mvn test会提示找不到某些资源文件,这是因为所有的非java文件都必须放到resources文件夹中,项目资源文件放在src/main/resources中,测试资源文件放在src/test/resources文件夹中。这一点一定要特别注意,有时候在webapp项目中进行测试的时候,需要WEB-INF文件夹放在Class Path中,配置如下:

org.apache.maven.plugins

maven-surefire-plugin

2.19.1

false

1

-Xmx1024m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8 -Xverify:none

${basedir}/src/main/webapp/‌​WEB-INF/

其他相关的目录如果也想加入到Class Path中的话方法也是类似的。

以上可以说能够解决95%以上的上述问题,但昨天我遇到一个非常奇葩的情况,简单来说有个Maven项目除了一个主pom.xml文件之外,包含两个子模块moduleA和moduleB,结构如下:

main

|-- ModuleA

|-- ModuleB

pom.xml

ModuleB依赖ModuleA,在Eclipse中对ModuleB进行单元测试正常,但对ModuleB执行mvn test命令的时候总是出现NullPointerException,不过我对出现NullPointerException异常的变量进行日志输出或调试的时候是有值的,非常奇怪。后来经过近两个小时的调试和排查发现原来ModuleB中测试的类中用到了ModuleA中类的某个方法,而这个方法是新增加的,并且ModuleA没有install,在Eclipse中默认会将ModuleA放入到环境变量中,所以不会出错。但执行mvn test的时候并不会将依赖的项目放入到ClassPath中,所以出现了错误。不过这个错误也的确怪异了一些,最后先将ModuleA使用mvn install之后,在对ModuleB进行mvn test就可以通过测试了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值