android - 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 或忽略它们的正确方法是什么。
如果我尝试在我的测试设置方法中初始化它,我没有得到上下文。
解决方案
您可以创建一个模拟应用程序类来扩展您的应用程序类,然后使用存根值或模拟对象覆盖 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)
推荐阅读
- javascript - 当我添加时,删除所有待办事项会将它们带回来
- c# - 从注册为来自外部源的重定向 URI 的 ASP.NET Core 服务调用 Angular 组件
- php - 在 laravel/cashier 中应用促销代码而不是优惠券
- c++ - c++ 当引用变量的值改变时?
- javascript - Chart.js - 向折线图背景添加渐变
- python - 未找到 Ubuntu 命令“pip”,但有 18 个类似的命令(熊猫)重新安装正常工作
- node.js - EC2 实例更改了公共 IP 地址。我可以重新找回旧的 IP 地址吗?
- python - 将抓取的数据转换/清理为熊猫数据框 python
- ios - 使用单视图控制器添加和编辑数据?
- json - 无法使用 jolt 将 json 列表转换为对象