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

时间:2016-05-06 18:00:20

标签: android android-gradle

我有一个包含两个库模块的Android Studio项目:foo-modulebar-module。每个都实现了一个库,foo-module定义了一个策略接口,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.gradlebar-module中的主要(非测试)类也能正常工作foo-module中的主(非测试)类很好。 IOW,虽然project()依赖项处理常规代码,但它不处理androidTest/代码。我得到“错误:包com.commonsware.foo.test不存在”。

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

在模块之间共享检测测试代码的方法是什么?

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

This SO question涵盖普通Java的类似基础。有人试过the one answer中的选项并让它们用于Android测试测试吗?第一个选项(将常用测试代码移动到另一个模块作为常规非测试代码)似乎是合理的,但我不知道其他两个是否适用于com.android.library插件而不是{{1}插件。

1 个答案:

答案 0 :(得分:12)

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