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