JUnit在maven中从JDK 1.6升级到JDK 1.8时失败,但它在eclipse中工作

时间:2015-09-09 04:42:15

标签: junit maven-2 java-8 dbunit maven-surefire-plugin

我在项目中使用JUnit进行代码覆盖。对于db我使用dbunit就像模拟DB一样。当我从Eclipse UI运行JUnit时,它会被传递,但是当它通过maven运行时它会失败。

通过使用maven,以上设置在JDK 1.6.25中正常运行,并且在升级到1.8.51时它开始失败。我已经更新了maven编译器插件,它没有用。我用于以下版本,junit - 4.7 2.dbunit - 2.4.8 hsqldb - 2.0.0 maven - 2.2.1。

1 个答案:

答案 0 :(得分:0)

             Issue:

- >在JAVA 1.6中运行良好的所有测试用例都开始无法迁移到JDK 1.8.51。 - >因此,我们面临构建失败问题以及代码覆盖率降低。

           Root Cause:

- > JUnit使用Java反射从Test类中获取测试方法。在JAVA 1.6中,测试方法的顺序与源文件中的声明一样返回。 - >但是从JAVA 7开始,JVM返回的方法顺序与源文件不同,它将随机返回。 - >由于我们的测试用例彼此依赖,由于订单更改,它开始失败。                   以下示例测试用例使用相同的数据(Mock DB)执行,                         - > AddOperationTestCase()                         - > EditOperationTestCase()                         - > DeleteOperationTestCase()                 如果由于JVM随机顺序而首先执行删除操作,则对于添加和编辑数据将无法使用,它将失败。

           Solution :

- >我试图在JUnit和Sure Fire插件中找到选项以保持与源文件相同的顺序,但我找不到那里的可行性。 - >我已经确定了将返回JUnit库中执行顺序的类,并相应地重写它以运行它的源文件顺序。 - >截至目前,我已将此注释包装器添加到失败的类中,现在构建成功运行。

Wrapper类的链接: https://somethingididnotknow.wordpress.com/2014/03/07/run-junit-tests-in-order/