多个Android测试模块之间共享代码的方法

27

我想要达到类似这样的效果:

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

有没有办法使用Android Gradle插件3.0+来实现?

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

我希望为不同类型的测试使用不同的测试运行器,并针对不同的变体进行测试。目前,在androidTest下的单个代码库中可以工作,但需要在自定义测试运行器中使用复杂的开关。

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

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

据我所知,除了com.android.test之外,我所知道的模块类型都不能依赖于生成APK的模块,但我无法从另一个com.android.test中依赖com.android.test


你找到这个问题的解决方案了吗? - Abdullah
还是一点头绪都没有。 - Dmitriy Voronin
2个回答

8
我最近遇到了这个问题,想分享一下我的解决方案,以便有需要的人参考。
目前为止我所做的(不是完美的解决方案 - 我猜,但至少它可以工作):
1. 创建一个名为 "testing_base" 或类似名称的新模块。 2. 在 "testing_base" 模块中仅将与测试相关的内容放入普通的包中,不要放在测试包/文件夹中。 3. 从其他模块中尝试导入来自 testing_base 模块的内容。
例如:testImplementation project(":testing_base")
希望这能帮助到某些人,祝测试愉快!

很抱歉,创建一个新的库是将测试代码与常规代码分离的唯一方法。d= (◕‿↼ ) 谢谢! - Top-Master
当我从命令行运行代码时,出现错误 项目路径为':mylibrary'的工程在项目中无法找到 - Mahmoud Mabrok
@MahmoudMabrok,你可能以错误的方式设置了新模块。 - ThaiPD
只有在我在另一个模块中使用具有“mylibrary”的模块时才会出现此错误。 例如,模块1有模块2,因此当我在模块3中使用模块1时,就会出现该错误。 - Mahmoud Mabrok
假设您有module1module2module3Module1依赖于module2,而module3依赖于module1。那么哪个模块依赖于mylibrary - ThaiPD

-3
我想为不同类型的测试使用不同的测试运行器。
要使用特定的测试运行器运行测试类,请使用@RunWith注释。
同时也可以针对不同的变体进行测试。
要针对特定的变体进行测试,请在app/src/androidTestVariantName中创建您的仪表化测试,或在app/src/testVariantName中创建您的单元测试。

这与问题有什么关系? - Rafsanjani
@Rafsanjani 怎么不是呢?我在这个答案中明确引用了问题中我要回答的点。 - Code-Apprentice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接