【问题标题】:How to run integrations test on a web project from another subproject using gradle如何使用 gradle 在另一个子项目的 Web 项目上运行集成测试
【发布时间】:2015-02-10 02:42:51
【问题描述】:

我有一个 gradle 多项目,其中我的 war 文件构建在一个子项目中,而我的集成测试在另一个子项目中。我已经读过 gretty 应该能够启动一个码头实例,让我在构建期间运行集成测试,但我无法弄清楚如何将 gretty integrationTestTask 任务“连接”到我的其他子项目中的任务实际测试将运行。

我的项目结构如下:

root/
    int-test/
        build.gradle
    web/
        build.gradle
    build.gradle
    settings.gradle

文件内容

root/settings.gradle:

include ':web'
include ':int-test'

root/build.gradle:

apply plugin: 'java'

root/web/build.gradle:

apply plugin: 'war'
apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'

gretty {
    contextPath = '/'
    integrationTestTask = 'intTests'
}

task intTests << {
    println 'This task will run in just the right time'
}

root/int-test/build.gradle:

apply plugin: 'java'

task intTests << {
    println 'All integration testing is done in here'
}

当我运行“./gradlew -q intTests”时,输出如下:

所有的集成测试都在这里完成 2014-12-11 15:37:02.046 信息 - 记录已初始化 @1157ms 2014-12-11 15:37:02.554 信息 - jetty-9.2.3.v20140905 2014-12-11 15:37:02.682 警告 - ServletContainerInitializers:检测到。类层次结构:空 2014-12-11 15:37:03.114 信息 - 开始 o.a.g.JettyWebAppContext@7da22e4a{/,文件:/Users/fredrik/callista/dev/grettyfitnesse/web/build/inplaceWebapp/,可用} 2014-12-11 15:37:03.130 信息 - 已启动 ServerConnector@2590ae17{HTTP/1.1}{0.0.0.0:8080} 2014-12-11 15:37:03.130 信息 - 开始 @2245ms 2014-12-11 15:37:03.137 警告 - Jetty 9.2.3.v20140905 已启动并监听端口 8080 2014-12-11 15:37:03.158 警告 - 运行于: 2014-12-11 15:37:03.159 警告 - http://localhost:8080/ 此任务将在正确的时间运行 2014-12-11 15:37:03.221 信息 - 停止 ServerConnector@2590ae17{HTTP/1.1}{0.0.0.0:8080} 2014-12-11 15:37:03.229 信息 - 停止 o.a.g.JettyWebAppContext@7da22e4a{/,文件:/Users/fredrik/callista/dev/grettyfitnesse/web/build/inplaceWebapp/,不可用} 2014-12-11 15:37:03.232 警告 - 码头 9.2.3.v20140905 已停止。 服务器停止。

因此,web 项目中的 intTests 任务将在正确的时刻运行,但 int-test 项目中的 intTests 任务将运行得早(在 web 服务器启动之前)。 如何设置,以便 gretty 插件“连接”到我的 int-test 项目中定义的 intTests 任务?

我尝试过的事情: * 设置“integrationTestTask = ':int-test:intTests'”希望足以指定 gretty 应该在哪个子项目中寻找正确的任务。结果 - 码头甚至没有启动。 * 在根 build.gradle 中创建 intTests 任务,尝试在 int-test 中扩展该任务。结果 - 没有区别。 * 在 web 项目的 intTests 任务中添加了一个 dependsOn(":int-test:intTests")。结果 - 没有区别

【问题讨论】:

    标签: java gradle build.gradle gretty


    【解决方案1】:

    首先,检查gretty.integrationTestTask = ":int-test:intTests" 是否有效。如果没有,请将以下内容添加到int-tests/build.gradle

    intTests {
        dependsOn(":web:taskThatStartsTheWebServer")
        finalizedBy(":web:taskThatStopsTheWebServer")
    }
    

    (您可以在 Gretty 文档或gradle tasks 的输出中找到任务名称。)

    请注意,它是task foo { dependsOn "bar" },而不是task foo &lt;&lt; { dependsOn "bar" }。最近的 Gradle 版本会检测到这个错误并导致构建失败。

    【讨论】:

    • 我遇到了类似的问题,并尝试应用建议的解决方案但没有成功。 appStart 任务上的构建暂停并且不执行任何测试。有什么建议我做错了什么?
    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 2015-01-22
    • 2022-11-30
    相关资源
    最近更新 更多