如何在Android

时间:2018-02-01 10:40:04

标签: android firebase junit firebase-cloud-messaging

我正在撰写FCM notification整合&它工作正常。要测试组件有没有办法模拟RemoteMessage对象?

通过嘲笑我的意思是执行Junit测试用例。 任何建议!

3 个答案:

答案 0 :(得分:1)

目前无法模拟FCM中使用的RemoteMessage对象。 AFAIK,甚至没有办法在不使用实际服务的情况下测试onMessageReceived()方法。

唯一有效的方法是测试你的sendNotification()(或任何你命名的方法),希望接受可能来自RemoteMessage对象的Hashmap(这当然是你的'仅使用数据消息有效负载

答案 1 :(得分:0)

不幸的是,您不能这样做,并且在不久的将来没有任何支持它的迹象。

您可以做的事情:我们所做的是在服务器中构建一个API命令,该命令将向您发送测试推送。支持会很乏味,但是就足够了。

甚至更糟:假设进行测试以确保可靠性。如果失败了怎么办?您请求一个新令牌,但FCM可能会给您相同的令牌,但是它不起作用!如果您使令牌无效并请求令牌-会有所帮助吗?不确定。

您的选择确实受到限制。

答案 2 :(得分:0)

转到您的FirebaseMessagingService子类,并在onMessageReceived方法上设置断点。像平常一样发送普通的推送通知。站在断点上检查remoteMessage对象。该对象的属性之一将是Bundle。现在,您只需要手动创建外观相同的Bundle,然后使用该捆绑包创建RemoteMessage,例如:

val bundle = Bundle().apply {
    // System fields
    putString("google.delivered_priority", "high")
    putLong("google.sent_time", Date().time)
    putLong("google.ttl", 2419200)
    putString("google.original_priority", "high")
    putString("google.message_id", UUID.randomUUID().toString())
    putString("from", <your fcm project_number, from google-services.json>)

    // Custom fields
    putString("type", "my-type")
    putString("message", "Me message")
    ...
}
val remoteMessage = RemoteMessage(bundle)