首页 > 解决方案 > Espresso 单元测试在 AWS Device Farm 上失败,但在本地运行

问题描述

我有一个Espresso单元测试,它在我的机器上本地运行良好。该测试使用并通过Koin 模拟ActivityTestRule和提供了一堆依赖项。依赖注入是在方法中完成的。@Before

测试成功通过,在我的本地设备和模拟器上没有任何问题。同样的测试在AWS Device Farm. 它试图初始化 myFirebaseMessagingService这甚至不是测试的一部分。我正在尝试在那里创建手动运行。我已验证我正在上传正确的原始debugAPK 和androidTestAPK。我还尝试Test Filter在 Device Farm 上运行特定的测试类。它在原始测试期间执行但失败@Before@After因为它无法在该 Firebase 服务中找到某些依赖项,这很奇怪,因为该类在测试中没有作用。

标签: androidcontinuous-integrationandroid-espressoandroid-testingaws-device-farm

解决方案


Firebase SDK 通过内容提供者(hack)自动初始化。Firebase SDK 需要安装 google play 服务,这些服务在 android 的 amazons fork 上是缺失的。您的代码应该准备好处理缺失的播放服务(通常),尤其是当您计划在亚马逊设备上运行时。

例如,按照Prevent auto initialization教程中的步骤https://firebase.google.com/docs/cloud-messaging/android/client#prevent-auto-init

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" /> 

稍后从代码重新初始化 FCM:

FirebaseMessaging.getInstance().isAutoInitEnabled = true

推荐阅读