首页 > 解决方案 > Firebase Analytics 为 Android 中的单元测试(Mockito)初始化

问题描述

我正在运行一个单元测试

@RunWith(MockitoJUnitRunner.class)

我使用 firebase Analytics 记录事件

MyApplication.getAnalytics().getInstance(appContext).logEvent(eventType, bundle)

这在我的应用程序类中

public static FirebaseAnalytics getAnalytics() {
        return FirebaseAnalytics.getInstance(appContext);
    }

现在在运行测试时,我得到NullPointerException. 为我的单元测试初始化​​ Analytics 或忽略它们的正确方法是什么。

如果我尝试在我的测试设置方法中初始化它,我没有得到上下文。

标签: androidmockitofirebase-analytics

解决方案


您可以创建一个模拟应用程序类来扩展您的应用程序类,然后使用存根值或模拟对象覆盖 getAnalytics。此外,您应该使您的 getAnalytics 方法成为非静态方法,因为它更易于测试,并且您可以通过依赖注入传递引用,或者您可以使用对应用程序类的静态引用(但这不是很可测试,所以我会选择第一个选项)

public class MockApplication extends MyApplication {
    public FirebaseAnalytics getAnalytics() {
        return mock(FirebaseAnalytics.class)
    }
}

然后你可以@Config像这样使用注释来配置你的测试运行器

@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.M, application = MockApplication.class)

推荐阅读