我正试图运行一个测试与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(我试图复制粘贴源代码在这里。失败得很惨……)
你有什么建议吗?
谢谢大家!
7条答案
按热度按时间8aqjt8rx1#
我也遇到了同样的问题,并通过在单元测试的前一步初始化Firebase来修复它:
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/
为了将来的参考,我通过调整规则,给予公众完全访问权,这样编写测试设置和清理就更容易了。
bf1o4zei3#
几天前我也遇到了同样的问题,我用错误所说的同样的方式解决了它。您得到该错误是因为您试图获取
Firebase
的示例而没有初始化它。请在尝试获取Firebase示例之前添加这行代码:另外,正如Franks所说,请确保在
build.gradle
文件中添加了以下代码行,整个文件的as the last line
。bqf10yzr4#
我用了最简单直接的方法。由于您在应用程序中初始化了Firebase应用程序,因此只需在那里创建一个变量。比如说
然后在Robolectric Application中扩展应用程序并覆盖变量。在这种情况下,不要忘记提供配置
axzmvihb5#
我也遇到了上述问题。做所有插件下载和检查的nuget。但最后,我发现崩溃是由于,应用程序包名称不匹配的一个分配在谷歌开发。应用程序包名称必须与Google Dev中分配的名称匹配。控制台
hfwmuf9z6#
@Before方法并没有为我解决这个问题,因为Firebase是在应用程序初始化期间调用的。我可以用这个来代替:
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