首页 > 解决方案 > 为什么在使用 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

标签: androidfirebasejunitmockitopowermockito

解决方案


推荐阅读