我有一个多模块的项目。我希望能够运行我为这些模块单独编写的插装测试。当我运行测试和初始化Activity时,我不断遇到以下错误。
默认FirebaseApp在此过程中未初始化。请确保首先调用FirebaseApp.initializeApp(Context)。
我试过在测试应用的上下文中显式地调用它,但没有用。我知道firebase是通过配置文件设置的,我没有显式地调用它来设置它。它在实际应用启动之前自动通过内容提供程序初始化(阅读博客)。
因为这是一个静态调用,我们没有显式地调用它,我也没有看到一种方法来模拟它。有没有一种方法可以完全禁用firebase,因为我在我的模块中运行最频繁的代码?
3条答案
按热度按时间wmvff8tz1#
Firebase使用内容提供程序在应用程序的onCreate()方法之前将库挂接起来。此内容提供程序在库
com.google.firebase.firebase-perf
中注册(通过build.gradle文件中的platform("com.google.firebase:firebase-bom:...
行导入)要停止firebase连接过程问题,您可以:
1.为android-test创建一个自定义的Application类,在应用程序的
onCreate()
中调用FirebaseApp.initializeApp()一次(如果你想在android测试中正确设置和测试Firebase,这很好)1.禁用firebase的提供程序(如果你不需要fire,这是完美的,但如果你在测试代码中使用firebase服务(如creashlytics等),可能会导致问题)
怎么做?
创建自定义应用程序类:
1.在文件夹
src/androidTest/
中创建文件MyCustomTestApp.kt
(或任何其他类名),内容为:字符串
1.在
src/androidTest/AndroidManifest.xml
文件中(如果不存在,请创建新文件)添加以下内容:型
完全禁用Firebase的内容提供程序:
在
src/androidTest/AndroidManifest.xml
文件中(如果不存在,请创建新文件)添加以下内容:型
k2fxgqgv2#
我也遇到了同样的问题,幸运的是我找到了这个帖子。我可以确认上面的Re'em的答案是正确的,但是有一个小问题,即androidTest的AndroidManifest.xml被忽略了。你可以在这里找到这个问题的解决方案。AndroidManifest in androidTest directory being ignored
siv3szwd3#
如果您有可以侦听的环境值,或者您可以知道在这些条件下存在或不存在的应用内状态,则可以根据需要启动它。但是,这需要 ALL Firebase调用执行健康检查,以防止它们在
apps.length == 0
字符串
或
型