我们如何在Android库模块中inheritancetesting类?

我有一个Android Studio项目,有两个库模块: foo-modulebar-module 。 每个实现一个库, foo-module bar-module根据foo-module定义一个策略接口和bar-module ,并实现这样一个策略。 foo-module使用stub策略实现来testing其核心代码( foo-module/src/androidTest/ ),并且bar-module应该有它自己的testingtesting。

我在foo-module/src/androidTest/中定义了一个AbstractTests类,它完成了大部分的实际testing。 我还在foo-module/src/androidTest/中有一个StubTests类,它扩展了AbstractTests并实现了必要的abstract方法来完成testing用例(提供策略的实现等)。 这一切都很好。

bar-module/src/androidTest/ ,我创build了一个BarStrategyTests类,用于镜像StubTests ,但提供了在bar-module实现的策略。 然而, BarStrategyTests无法看到AbstractTests ,即使我在我的build.gradle文件中compile project(':foo-module') ,而bar-module的主要(非testing)类可以正常工作,testing) foo-module类。 IOW,而project()依赖处理常规代码,而不处理androidTest/ code。 我得到“错误:包com.commonsware.foo.test不存在”。

我也尝试添加androidTestCompile project(':foo-module') ,结果相同。

在模块之间共享仪器testing代码的方法是什么?

暂时我可以克隆AbstractTests ,但这不是一个很好的长期解决scheme。

这个问题涵盖了普通Java的相似之处。 有没有人试过一个答案的选项,并得到他们为Android仪器testing工作? 第一个选项(把普通的testing代码作为普通的非testing代码移动到另一个模块中)似乎是合理的,但是我不知道其他两个是否可以用com.android.library插件而不是java插件。

Solutions Collecting From Web of "我们如何在Android库模块中inheritancetesting类?"

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