测试 - 在此过程中未初始化 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)
我正在尝试 运行 使用 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)