【问题标题】:How to make Clover skip integration tests?如何让 Clover 跳过集成测试?
【发布时间】:2014-09-24 20:48:24
【问题描述】:

本周早些时候,我在恢复 Clover 运行时更改的项目属性时遇到了很大的困难(这样它就不会干扰后续插件):

How to revert Maven project.build variables after Clover plugin finishes?

我通过在 Maven 启动时保存这些属性并在我的插件中使用保存的变量而不是 Clover 更改的变量来解决了这个问题。

现在我能够在预集成测试阶段托管非仪器 WAR 文件,我的测试能够成功运行并通过(以前,我无法从仪器 WAR 文件运行应用程序,因为Clover 不在发布类路径上)。

不幸的是,我发现分叉的 Clover 生命周期超出了测试阶段。在我的测试通过并且嵌入式 Tomcat 实例关闭后,原始生命周期再次运行 Tomcat7 插件,启动服务器,然后重新运行测试。

我可以忍受它运行两次我的单元测试(这可以捕获仅在有或没有 Clover 仪器的情况下出现的边缘情况错误),但运行我的集成测试两次是完全没有必要的。这些测试不涉及生产代码(他们使用 Selenium 在浏览器中自动进行 UI 测试)。如前所述,检测的 WAR 文件无论如何都不起作用,因此在运行集成测试时它甚至不再存在。绝对没有理由需要再次运行这些测试。

如何告诉 Clover 在测试阶段完成后终止分叉生命周期,以便集成测试只运行一次?我目前只能在整个生命周期内启用它,或者根本不启用。

更新:我发现即使我通过传入 -Dmaven.clover.skip=true 来禁用 Clover 插件,它仍然会分叉生命周期。我发现防止这种情况发生的唯一方法是完全注释掉 Clover 插件,这样它就没有机会在跳过检测之前分叉生命周期。

【问题讨论】:

    标签: maven integration-testing code-coverage clover


    【解决方案1】:

    Clover 具有三个可用于代码检测的目标:

    clover2:instrument 将并行构建生命周期分叉到“安装”阶段 - 这就是为什么您会看到构建和测试运行两次的原因 - 一次用于标准构建,一次用于构建与三叶草。 clover2:instrument 还产生两组工件 - 正常的(例如 myapp-1.0.jar)和“cloverized”的(例如 myapp-1.0-clover.jar)。

    还有一个名为 clover2:instrument-test 的类似目标 - 它也分叉构建,但直到“测试”阶段。如果您不想运行集成测试或者您想避免在本地 Maven 缓存中安装工件,它可能会很有用。

    如果您不喜欢这种行为,可以改用 clover2:setup 目标。它将在 Maven 的默认构建生命周期中执行源代码检测。这意味着构建和测试都只执行一次。使用 clover2:setup 时唯一需要记住的是生成的工件(JAR、WAR)将包含检测类,因此很可能您不应将 'mvn install' 或 'mvn deploy' 与 'clover2: setup' - 为了避免将“cloverized” JAR 推送到您的存储库中:-)

    如果您在 CI 上运行测试,我建议使用“clover2:setup”配置单独的构建计划。如果您有任何问题,请随时通过 support.atlassian.com 与我联系。

    【讨论】:

    猜你喜欢
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2017-09-14
    相关资源
    最近更新 更多