我有一个带有两个库模块的Android Studio项目:foo-module
和bar-module
。每个实现一个库,foo-module
定义策略接口(interface),bar-module
取决于foo-module
并实现这种策略。 foo-module
具有工具测试(foo-module/src/androidTest/
)以使用存根策略实现来测试其核心代码,并且bar-module
应该具有自己的工具测试。
我在AbstractTests
中定义了一个foo-module/src/androidTest/
类,它可以进行大多数实际测试。我在StubTests
中还有一个foo-module/src/androidTest/
类,该类扩展了AbstractTests
并实现了必要的abstract
方法以完成测试用例(提供了策略的实现,等等)。这一切都很好。
在bar-module/src/androidTest/
中,我创建了一个BarStrategyTests
类,该类旨在镜像StubTests
,但提供了在bar-module
中实现的策略。但是,即使我的BarStrategyTests
文件中有AbstractTests
,compile project(':foo-module')
也看不到build.gradle
,并且bar-module
中的主要(非测试)类可以与foo-module
中的主要(非测试)类一起正常工作。 IOW,虽然project()
依赖项处理常规代码,但不处理androidTest/
代码。我收到“错误:包com.commonsware.foo.test不存在”。
我也尝试添加androidTestCompile project(':foo-module')
,结果相同。
在模块之间共享仪器测试代码的秘诀是什么?
暂时,我可以克隆AbstractTests
,但这不是一个很好的长期解决方案。
This SO question涵盖了普通Java的类似 Realm 。有没有人尝试过the one answer中的选项,并使它们可用于Android工具测试?第一种选择(将通用测试代码作为常规的非测试代码移动到另一个模块中)似乎是合理的,但是我不知道其他两个是否可以与com.android.library
插件而不是java
插件一起很好地工作。
最佳答案
由于所有测试类(单元和仪器)都不是任何模块(包括aar)的一部分,因此无法通过依赖该模块来使用它们。我也遇到了这个问题,并通过创建test-module
并在其中放置了所有必需的类(src/main/java
)来解决了这个问题。
因此,在您的情况下,您可以在此模块中移动AbstractTests
并将此模块用作androidTestCompile
依赖项。