我们如何在Android库模块中继承测试类?

Com*_*are 18 android android-gradle-plugin

我有一个带有两个库模块的Android Studio项目:foo-modulebar-module.每个都实现一个库,foo-module定义一个策略接口,并bar-module依赖foo-module并实现这样的策略.foo-module有一个instrumentation tests(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,但这不是一个很好的长期解决方案.

这个问题涵盖了普通Java的类似基础.有没有人在一个答案中尝试过这些选项并让它们用于Android仪器测试?第一个选项(将常用测试代码移动到另一个模块作为常规非测试代码)似乎是合理的,但我不知道其他两个是否适用于com.android.library插件而不是java插件.

Ole*_*dov 16

由于所有测试类(单元和仪器)都不是任何模块的一部分(包括aar),因此它们不能通过依赖于该模块而获得.我也遇到了这个问题,并通过创建test-module并将所有必需的类放入其中来解决它(src/main/java).因此,在您的情况下,您可以移动AbstractTests此模块并将此模块用作androidTestCompile依赖项.

  • 好吧,你必须避免`foo-module`取决于`foo-module-test-common`.一种选择是将所有测试从`foo-module`移到`foo-module-test-common`,这样这个模块不仅包含`src/main/java`中的常见测试类,还包含`foo的测试-src/androidTest/java`中的-module` (3认同)