gpt4 book ai didi

android - 为模块运行仪器测试时禁用 Firebase 初始化

转载 作者:行者123 更新时间:2023-12-04 23:51:31 28 4
gpt4 key购买 nike

我有一个多模块项目。我希望能够分别运行我为这些模块编写的仪器测试。当我运行测试并初始化 Activity 时,我不断遇到以下错误。

Default FirebaseApp is not initialized in this process. Make sure to call FirebaseApp.initializeApp(Context) first.


我尝试在测试代码中使用测试应用程序的上下文显式调用它,但无济于事。我知道firebase是通过配置文件设置的,我没有明确调用它来设置它。在实际应用程序启动之前,它会通过内容提供者(阅读博客)自动初始化。
因为这将是一个静态调用并且我们没有明确调用它,所以我也看不到模拟它的方法。有没有办法完全禁用我的 UITest 在我的模块中运行的 firebase?

最佳答案

Firebase 在应用程序的 onCreate() 方法之前使用内容提供程序来连接库。
此内容提供者已在库中注册 com.google.firebase.firebase-perf (由 bu​​ild.gradle 文件中的 platform("com.google.firebase:firebase-bom:... 行导入)
要停止 firebase 连接过程问题,您可以:

  • 为 android-test 创建一个自定义应用程序类,在应用程序的 onCreate() 中调用 FirebaseApp.initializeApp() 一次(如果您希望在您的 android 测试中正确设置和测试 firebase)
  • 禁用 firebase 的提供程序(如果您不需要火,那就完美了,但如果您在测试代码中使用 firebase 服务(例如 crashlytics 等)可能会导致问题)

  • 怎么做?

    创建自定义应用程序类:
  • 在文件夹 src/androidTest/创建文件MyCustomTestApp.kt (或任何其他类名),内容:

  • package <...> // use the default package that was set when you created the file

    import android.app.Application
    import com.google.firebase.FirebaseApp

    class MyCustomTestApp: Application() {
    override fun onCreate() {
    super.onCreate()
    FirebaseApp.initializeApp(this)
    }
    }
  • 在文件 src/androidTest/AndroidManifest.xml文件(如果尚不存在则创建新文件)添加以下内容:

  • <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:versionCode="1"
    android:versionName="1.0" >

    <application
    android:name="here setup the path to your custom application class, e.g. com.yourApp.package.name.MyCustomTestApp"
    tools:replace="android:name">

    <--! if you have test activities etc, you register them here ... -->

    </application>
    </manifest>

    完全禁用 firebase 的内容提供者:
    在文件 src/androidTest/AndroidManifest.xml文件(如果尚不存在则创建新文件)添加以下内容:
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application>

    <!-- disable firebase provider to get rid of "Default FirebaseApp is not initialized in this process" exceptions -->
    <provider
    android:authorities="${applicationId}.firebaseperfprovider"
    android:name="com.google.firebase.perf.provider.FirebasePerfProvider"
    tools:node="remove" />

    </application>
    </manifest>

    关于android - 为模块运行仪器测试时禁用 Firebase 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68504720/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com