测试 - 在此过程中未初始化 FirebaseApp

Test - FirebaseApp is not initialized in this process

我正在尝试 运行 使用 Robolectric 进行测试,它与 Firebase 集成。我有一个项目 MyProject - Test,我将使用它来 运行 在数据库的真实实例中进行测试。

问题是,当运行在测试前进行清理时,出现错误:

java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process null. Make sure to call FirebaseApp.initializeApp(Context) first.

at com.google.firebase.FirebaseApp.getInstance(Unknown Source)
at com.google.firebase.database.FirebaseDatabase.getInstance(Unknown Source)
at com.cgbros.silkhub.activity.listener.LoginActivityUnitTest.cleanUp(LoginActivityUnitTest.kt:26) <28 internal calls>

测试文件: https://gist.github.com/augustoerico/e88d3e5b59ae5d023d83c114b8ffa708 (我试图在这里复制粘贴源代码。惨败......)

关于如何使这项工作有任何见解吗?

谢谢!

我前几天也遇到了同样的问题,我按照错误所说的方式解决了它。您收到该错误是因为您试图获取 Firebase 的实例而不对其进行初始化。请在尝试获取这样的 Firebase 实例之前添加这行代码:

FirebaseApp.initializeApp(this);

此外,正如 Franks 所说,请确保在 build.gradle 文件中添加了以下代码行,as the last line 整个文件。

apply plugin: 'com.google.gms.google-services'

好的,我知道了。这实际上是一个概念问题。问题是我正在尝试使用 Firebase Android SDK 在 Android 上下文之外 运行 进行测试。我的意思是,我的测试不是 Android 应用程序,我正在尝试使用 Android SDK。所有 FirebaseApp.initializeApp() 都需要一个 Context 作为参数。

所以,我要做的是找到一种与我的 FirebaseDatabase 交互的方法。我想我可以使用 firebase-admin,或者使用这个:https://github.com/bane73/firebase4j

感谢您抽出时间来帮助我(:

** 更新 **

我选择使用 Firebase REST API https://firebase.google.com/docs/reference/rest/database/

为了将来参考,我通过调整规则授予 public 完全访问权限,以便更容易编写测试设置和清理。

我也遇到了上面的问题。通过 nuget 进行所有插件下载和检查。但最后,我发现崩溃是由于,应用程序包名称与 Google Dev 中分配的名称不匹配。 应用程序包名称必须与 Google Dev 中分配的名称相匹配。控制台

添加此行后出现错误

FirebaseApp.initializeApp(这个);

那你也必须这样做

将此行添加到 Gradle(应用程序)

应用插件:'com.google.gms.google-services'

将此行添加到 Gradle(项目)

类路径'com.google.gms:google-services:3.2.1'

还要检查是否没有依赖项丢失,并确保添加 google-services.json

我遇到了同样的问题,并通过在我的单元测试之前的步骤中初始化 Firebase 解决了这个问题:

FirebaseApp.initializeApp(InstrumentationRegistry.getInstrumentation().targetContext)

我用的是最简单直接的方法。 由于您在应用程序中初始化了 Firebase 应用程序,因此只需在那里创建一个变量。例如,

//Your Application.class
open var isTestMode = false

onCreate(){
if(!isTestMode){
//Init your Firebase app
}
}

然后在 Robolectric 应用程序中扩展您的应用程序并覆盖变量。在这种情况下不要忘记提供配置

@Config(application = TestApplication::class)