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

cczfrluj  于 2023-05-21  发布在  Android
关注(0)|答案(7)|浏览(255)

我正试图运行一个测试与Robolectric和它有一个集成与Firebase。我有一个项目MyProject - Test,我将使用它在数据库的真实的示例中运行测试。
问题是,当在测试前运行cleanup时,我遇到了错误:

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(我试图复制粘贴源代码在这里。失败得很惨……)
你有什么建议吗?
谢谢大家!

8aqjt8rx

8aqjt8rx1#

我也遇到了同样的问题,并通过在单元测试的前一步初始化Firebase来修复它:

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

d7v8vwbk2#

好吧,我想明白了。这实际上是一个概念问题。问题是我试图使用Firebase Android SDK在Android上下文之外运行测试。我的意思是,我的测试不是一个Android应用程序,我试图使用Android SDK。所有FirebaseApp.initializeApp()都需要Context作为参数。
所以,我必须做的是找到一种方法来与我的Firebase数据库交互。我想我可以使用firebase-admin,或者使用这个:https://github.com/bane73/firebase4j
谢谢你花时间帮助我(:

更新

我选择使用Firebase REST API https://firebase.google.com/docs/reference/rest/database/
为了将来的参考,我通过调整规则,给予公众完全访问权,这样编写测试设置和清理就更容易了。

bf1o4zei

bf1o4zei3#

几天前我也遇到了同样的问题,我用错误所说的同样的方式解决了它。您得到该错误是因为您试图获取Firebase的示例而没有初始化它。请在尝试获取Firebase示例之前添加这行代码:

FirebaseApp.initializeApp(this);

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

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

bqf10yzr4#

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

//Your Application.class
open var isTestMode = false

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

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

@Config(application = TestApplication::class)
axzmvihb

axzmvihb5#

我也遇到了上述问题。做所有插件下载和检查的nuget。但最后,我发现崩溃是由于,应用程序包名称不匹配的一个分配在谷歌开发。应用程序包名称必须与Google Dev中分配的名称匹配。控制台

hfwmuf9z

hfwmuf9z6#

@Before方法并没有为我解决这个问题,因为Firebase是在应用程序初始化期间调用的。我可以用这个来代替:

MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        if (BuildConfig.DEBUG) {
            if (Build.FINGERPRINT == "robolectric") {
                FirebaseApp.initializeApp(this)
            }
            logger.w("Using Firestore emulator")
            val firestore = Firebase.firestore
            firestore.useEmulator("192.168.1.102", 8080)
        }
    }
}
dl5txlt9

dl5txlt97#

在添加这一行之后,然后你得到错误
System. out. println(this);
那你也得这么做

将此行添加到Gradle(App)

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

将此行添加到Gradle(项目)

classpath 'com.google.gms:google-services:3.2.1'
还要检查是否没有缺少依赖项,并确保添加了google-services.json

相关问题