Firebase Analytics初始化Android中的单元测试(Mockito)

Shu*_*ham 9 android mockito firebase-analytics

我正在进行单元测试

@RunWith(MockitoJUnitRunner.class)

我使用firebase Analytics来记录事件

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

这在我的Application类中

public static FirebaseAnalytics getAnalytics() {
        return FirebaseAnalytics.getInstance(appContext);
    }
Run Code Online (Sandbox Code Playgroud)

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

我没有得到上下文,以防我尝试在我的测试设置方法中初始化它.

Zac*_*art 0

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

public class MockApplication extends MyApplication {
    public FirebaseAnalytics getAnalytics() {
        return mock(FirebaseAnalytics.class)
    }
}
Run Code Online (Sandbox Code Playgroud)

然后您可以使用@Config注释来配置您的测试运行程序,如下所示

@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.M, application = MockApplication.class)
Run Code Online (Sandbox Code Playgroud)

  • 我没有使用 Roboelectric 来运行我的测试,有什么方法可以仅使用 Mockito 来运行我的测试吗? (2认同)