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

Jea*_*ôté 5 java module gradle build.gradle

我已经修改了我的项目以成为多平台.

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

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

  • 核心
  • 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'
}
Run Code Online (Sandbox Code Playgroud)

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

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

FAILURE: Build failed with an exception.

* What went wrong:
Task 'testDebug' not found in project ':core'.
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:有没有办法,在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'
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑 我发现我可以gradlew build在核心上执行命令,它将在'核心'模块中运行测试.但是如果有可能的话,我想通过"级联"运行这些测试.

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

Jea*_*ôté 0

在阅读了 Gradle 网站的文档后,我发现这个非常好的函数buildNeeded只是运行所有的 buildType 并且你无法更改。唯一可以让您选择构建类型的函数分别是assembleDebugassembleRelease

由于我的发布过程(创建标签、更新版本、推送到 git 等)是在 后立即运行的assembleRelease,所以我陷入了困境,因为buildNeeded在夜间构建中运行会触发发布过程。

因此,我修改了 build.gradle 文件来创建一个名为releaseVersionwhich dependentOn的任务zipalignRelease。因此,当我真的想创建一个版本时,我会调用releaseVersion,但是当我只想在夜间构建中构建/测试时,我会调用buildNeededcommand.

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