Gradle:如何从模块依赖项运行测试?

时间:2016-05-05 12:19:40

标签: java gradle module build.gradle

我已将我的项目修改为多平台。

以前的状态: 只有一个模块(项目)和一个build.gradle。所有测试都在测试文件夹中,当我运行gradlew testDebug时,我的所有500个测试都在运行。

新州: 我有一个主要的gradle项目,除了持有3个模块之外什么都不做

  • core
  • androidversion
  • rasberryPiVersion

这些模块中的每一个都有自己的gradle文件,但只能构建android和rasberryPi模块。在它们的依赖项中(在它们各自的build.gradle文件中),它们针对“核心”模块进行编译。像这样:

dependencies {
    compile project(':clapcore')
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android:android:4.1.1.4'
}

我所有的500项测试现在都在核心。因此,当我在Android模块上执行gradlew clean assembleDebug testDebug时,未检测到任何测试,并且test-result的文件夹为空。

我试图直接在核心模块上运行testDebug命令,但由于它不是自己构建的,因此收到错误:

FAILURE: Build failed with an exception.

* What went wrong:
Task 'testDebug' not found in project ':core'.

所以我的问题是:有没有办法,在gradle中,告诉“testDebug”命令运行其模块依赖(核心)中的所有测试?

我还尝试在android模块的依赖项中添加一个testCompile,但它不起作用,如下所示:

dependencies {
    compile project(':clapcore')
    testCompile project(':clapcore')
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android:android:4.1.1.4'
}

谢谢!

修改 我发现我可以在核心上执行命令gradlew build,它将在“核心”模块中运行测试。但是如果有可能的话,我想通过“级联”运行这些测试。

*编辑2 * 我发现我可以在'android'模块上执行命令gradlew buildNeeded,它将为android模块和核心进行构建。不幸的是,它只是在发布!如果有人可以指出我使用此功能的方法,但在调试中,这将是惊人的。我在调试中需要它,因为发布版本启动了更多的任务,如更改版本,提交git,推送等等......这仅适用于每晚构建,因此需要进行调试。

1 个答案:

答案 0 :(得分:0)

在阅读Gradle网站的文档后,我发现非常好的函数buildNeeded只运行所有buildType而你无法改变。允许您选择buildType的唯一函数分别是assembleDebugassembleRelease

由于我的发布过程(标记的创建,版本更新,推送到git等等)在assembleRelease之后运行,我被卡住了,因为在夜间构建中运行buildNeeded会触发发布过程。

所以我修改了build.gradle文件以创建一个名为releaseVersion的任务,该任务依赖于zipalignRelease。因此,当我真的想要创建一个版本时,我会调用releaseVersion但是当我只想在每晚构建中构建/测试时,我会调用buildNeeded命令。

需要注意的事项:测试结果将出现在每个模块的每个“build”文件夹中。如果使用CI,请务必小心清洁所有模块。