【问题标题】:JUnit are failing when upgraded from JDK 1.6 to JDK 1.8 in maven, but its works in eclipse在 Maven 中从 JDK 1.6 升级到 JDK 1.8 时 JUnit 失败,但它在 eclipse 中工作
【发布时间】:2015-12-04 22:04:36
【问题描述】:

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

以上设置在 JDK 1.6.25 中使用 maven 运行良好,但升级到 1.8.51 时开始失败。我已经更新了 maven 编译器插件,它不起作用。我用的是以下版本,junit - 4.7 2.dbunit - 2.4.8 hsqldb - 2.0.0 maven - 2.2.1。

【问题讨论】:

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


    【解决方案1】:
                 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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2017-02-28
      • 2013-03-16
      • 2014-07-03
      相关资源
      最近更新 更多