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

我有一个带有两个库模块的Android Studio项目: foo-modulebar-module 。 每个都实现一个库, foo-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 ,但这不是一个很好的长期解决方案。

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

  • Gradle - select性模块编译(否则重复使用jar)
  • Android Studio在更新后显示错误(缺少翻译)
  • Dagger 2和android Studio:工作但看不到生成的类
  • 如何使用Gradle抑制“警告:忽略匿名内部类的InnerClasses属性”?
  • 匕首2和android工作室:工作,但看不到生成的类
  • 添加一个Fragment后,Android工作室分解了我的build.gradle文件
  • Android gradle uploadArchivesbuild设时
  • Gradle:如何将Android库发布到本地存储库
  • 由于所有测试类(单元和仪器)都不是任何模块的一部分(包括aar),因此它们不能通过依赖于该模块而获得。 我也遇到了这个问题并通过创建test-module并将所有必需的类放入其中来解决它( src/main/java )。 因此,在您的情况下,您可以在此模块中移动AbstractTests并将此模块用作androidTestCompile依赖项。