android - 为什么在使用 Firebase 的单元测试模块时出现 java.lang.IllegalStateException?
问题描述
我对使用 Firebase 执行某些逻辑的类进行单元测试。该模块上的所有单元测试似乎都可以正常工作。2个星期前。本周我在我的应用程序中更改了很多东西,今天上面提到的单元测试抛出了错误。
java.lang.IllegalStateException:无法转换名为 com.google.firebase.messaging.RemoteMessage 的类。原因:com.google.firebase.messaging.RemoteMessage 中的getSentTime()J:堆栈高度不一致-1
单元测试:
@Test
public void onMessageReceived() throws Exception {
PowerMockito.mockStatic(UiTools.class);
PowerMockito.mockStatic(RemoteMessage.class);
fcmService = spy(Whitebox.newInstance(FcmService.class));
Service service = mock(Service.class);
PowerMockito.whenNew(Service.class).withNoArguments().thenReturn(service);
Map<String, String> map = new HashMap<>();
map.put("message", "test");
remoteMessage = mock(RemoteMessage.class);
PowerMockito.when(remoteMessage.getData()).thenReturn(map);
PowerMockito.when(remoteMessage.getNotification()).thenReturn(mock(RemoteMessage.Notification.class));
PowerMockito.doNothing().when(UiTools.class, "sendNotification", anyString(), anyString());
fcmService.onMessageReceived(remoteMessage);
verify((FirebaseMessagingService)fcmService).onMessageReceived(remoteMessage);
}
我尝试模拟 RemoteMessage,尝试监视 RemoteMessage,尝试在 RemoteMessage 上使用 WhiteBox - 但错误未修复。
当我更改模拟 RemoteMessage 以创建新对象时
final HashMap<String, String> map = new HashMap<>();
map.put("message", "test message");
RemoteMessage remoteMessage = new RemoteMessage.Builder("test").setData(map).build();
/* next string is DataApi_FcmServiceTest.java:97 - look on next error */
fcmService.onMessageReceived(remoteMessage);
我收到新错误:
java.lang.NullPointerException
at com.google.firebase.messaging.Constants$MessagePayloadKeys.extractDeveloperDefinedPayload(com.google.firebase:firebase-messaging@@21.0.1:2)
at com.google.firebase.messaging.RemoteMessage.getData(com.google.firebase:firebase-messaging@@21.0.1:1)
at club.people.fitness.data_api.FcmService.onMessageReceived(FcmService.java:30)
at club.people.fitness.data_api.DataApi_FcmServiceTest.onMessageReceived(DataApi_FcmServiceTest.java:97)
这个错误我无法修复,因为在方法 getData() Firebase 想要这样做:this.bundle.putString("collapse_key", var1);
但是 this.bundle 总是 null
解决方案
推荐阅读
- excel - 如果行为空,则将活动单元格的整行复制到下一行
- c# - 如何从 Xamarin-Android 中的 Firebase 实时数据库中检索单个记录?
- python - 在条形图中获取有关 matplotllib 的数据
- class - love2D中带驼峰的继承
- c - 如何修复“HDF5-DIAG:错误无法打开文件”?
- javascript - 如何在 Meteor-cordova 项目中添加应用程序链接
- php - 如何在 wordpress 中将图像添加到自定义主题本身?
- batch-file - 批处理环境变量问题
- javascript - 在 React 中为 Html 元素设置默认组件
- r - 如何在ggplot2中使用“grid.arrange”在特定位置留下没有图形的间隙