一种在多个android测试模块之间共享代码的方法

时间:2017-08-31 17:15:27

标签: android android-gradle android-testing android-instrumentation

我想实现这样的目标:

[ComponentTestsModule] com.android.test
[FunctionalTestsModule] com.android.test
both depends on
 -> [TestLibraryModule] ?
which depends on
   -> [AppModule] com.android.application

使用android gradle plugin 3.0+有没有办法做到这一点?

为什么我需要多个测试模块?

我想要针对不同类型的测试使用不同的测试运行器,同时针对不同的变体。 它现在正在使用androidTest下的单个代码库,但在自定义测试运行器中使用了丑陋的开关。

为什么我需要测试库模块?

我想在不同类型的测试之间共享相同的页面对象,也许是一些实用程序代码。 问题是:页面对象必须能够访问R类应用程序(定位器:R.id。*)

我所知道的任何模块类型都不能依赖于APK生成模块,期望来自com.android.test,但我无法依赖com.android.test与另一个com.android.test

2 个答案:

答案 0 :(得分:1)

我最近遇到了这个问题,只是想分享我的解决方案,以防某些人需要。

到目前为止,我所做的(不是一个完美的解决方案-我想,但至少可以奏效)。

  1. 创建一个名为 testing_base 或类似名称的新module

  2. 仅在 testing_base module中放入与 testing 相关的内容(就像您希望共享的代码一样)模块之间)不包含在测试软件包/文件夹中

  3. 从“其他”模块中,尝试从testing_base module

  4. 导入内容

例如:testImplementation project(":testing_base")

希望它可以帮助某人,进行愉快的测试!

答案 1 :(得分:0)

  

我想为不同类型的测试提供不同的测试跑步者

要使用特定测试运行器运行测试类,请使用@RunWith注释。

  

也针对不同的变种

要定位特定变体,请在app/src/androidTestVariantName中为已检测的测试创建测试,或在app/src/testVariantName中为单元测试创​​建测试。