Android Gradle 1.1 - 添加对另一个项目测试的测试依赖项

Posted

技术标签:

【中文标题】Android Gradle 1.1 - 添加对另一个项目测试的测试依赖项【英文标题】:Android Gradle 1.1 - adding a test dependency on another project's tests 【发布时间】:2015-04-29 01:40:04 【问题描述】:

我有 2 个模块:AB

-A 是一个独立的模块。它的测试完全可以自己运行。 -B 是一个依赖模块。它的测试需要A的测试文件夹中的某个文件(B中的一个测试文件扩展了A中的一个)

 

以下是我认为Bbuild.gradle的相关部分:

android  
  ...
  sourceSets 
    test.java.srcDirs += "../A/src/test/java"
  


dependencies 
  compile project(':A')

  testCompile 'junit:junit:4.10'
  testCompile 'org.robolectric:robolectric:2.4'
  testCompile 'org.mockito:mockito-core:1.9.5'

虽然这在技术上可以满足我的需要 - 它有一个令人讨厌的副作用,即每当我运行 A 的单元测试时,它们也会运行所有 B' s 测试。如果不是这样,我真的很想。

 

我正在使用 Android Gradle 1.1(以及 Android Studio 1.1),我认为这给我带来了一些问题。我已经尝试了所有我能找到的解决方案 - 不幸的是,它们似乎都不适用于 Android Gradle 1.1 - 例如:

Bbuild.gradle 中删除 sourceSets 并添加(到 B 的依赖项)该行

 testCompile project(':A').sourceSets.test.output

产生构建错误Could not find property 'test' on SourceSet container.

 

我是不是走错了路?是否有更简单/更好的方法来跨模块包含测试文件?我对 Gradle/Android Studio 很陌生,所以我完全有可能错过了一个明显的解决方案。

【问题讨论】:

将 A 的测试添加到 B 的源集 => 运行 A 测试会导致 B 测试运行?这在我的脑海中没有意义,这仍然是这样吗?顺便说一句,另一种方法是将 A 的测试打包为 jar 并将其用作 B 的 testCompile 依赖项。 【参考方案1】:

使用命令按树检查所有模块:

gradle projects

它将列出您的所有项目模块,您可以查看您是否以正确的方式配置子项目。同时运行命令:

gradle --gui

它将列出所有模块的所有任务,并且您始终可以独立于其他模块运行一个模块,例如

gradle A:tasks
gradle A:test
gradle B:test

或者两者都有

gradle A:tasks B:test

注意:如果是根项目和B,C,D子模块,则不需要指定A,但对于子模块,您需要指定它。当你这样做时:

gradle --gui

您可以双击任何任务以查看其运行方式,也可以从命令行手动执行相同操作。希望这会有所帮助

【讨论】:

以上是关于Android Gradle 1.1 - 添加对另一个项目测试的测试依赖项的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 学习笔记概述

Android Gradle 学习笔记概述

Android gradle 动态添加模块依赖

Android Gradle 插件自定义 Gradle 任务 ⑤ ( 为自定义 Gradle 任务添加依赖任务 | Gradle 任务依赖执行顺序控制 )

Android Gradle 插件自定义 Gradle 任务 ⑤ ( 为自定义 Gradle 任务添加依赖任务 | Gradle 任务依赖执行顺序控制 )

Android Gradle 插件Gradle 构建生命周期 ② ( Gradle 类的添加构建生命周期监听器函数 | Gradle#addListener 函数 )