代码之家  ›  专栏  ›  技术社区  ›  Erico

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

  •  15
  • Erico  · 技术社区  · 7 年前

    我正在尝试使用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 (我试着在这里复制粘贴源代码。失败得很惨…)

    有什么见解可以帮助我实现这一点吗?

    非常感谢。

    6 回复  |  直到 7 年前
        1
  •  3
  •   Erico    7 年前

    好的,我已经弄明白了。这实际上是一个概念问题。问题是,我试图使用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/

    为了便于将来参考,我通过调整规则为公众提供了完全访问权限,因此更容易编写测试设置和清理。

        2
  •  3
  •   Wirling    4 年前

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

    FirebaseApp.initializeApp(InstrumentationRegistry.getInstrumentation().targetContext)
    
        3
  •  1
  •   Alex Mamo    7 年前

    Firebase 没有初始化。请在尝试获取Firebase实例之前添加这行代码,如下所示:

    FirebaseApp.initializeApp(this);
    

    build.gradle 文件 as the last line 您的整个文件。

    apply plugin: 'com.google.gms.google-services'
    
        4
  •  0
  •   rsssssonsss    7 年前

    我也面临着上述问题。nuget完成所有插件下载和检查。但最后,我发现崩溃是由于,应用程序包名称与Google Dev中指定的名称不匹配。 应用程序包名称必须与在Google开发控制台中分配的名称匹配

        5
  •  0
  •   Valery M    3 年前

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

    //Your Application.class
    open var isTestMode = false
    
    onCreate(){
    if(!isTestMode){
    //Init your Firebase app
    }
    }
    

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

    @Config(application = TestApplication::class) 
    
        6
  •  -1
  •   Pankaj Jangid    6 年前

    在添加这行之后,您会得到错误

    FirebaseApp。初始化EAPP(本);

    那你也得这么做

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

    应用插件:“com。谷歌。gms。谷歌服务'

    将此行添加到Gradle(项目)

    类路径的com。谷歌。谷歌服务:3.2.1'

    还要检查是否缺少依赖项,并确保添加了谷歌服务。json