我正在编写一个FCM通知集成,它工作正常。要测试组件,有没有办法模拟远程消息对象?
通过嘲笑,我的意思是执行Junit测试用例。任何建议!
转到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)
目前无法模拟 FCM 中使用的RemoteMessage
对象。AFAIK,甚至没有办法在不使用实际服务的情况下测试onMessageReceived()
方法。
唯一有效的方法是测试您的sendNotification()
(或您命名的方法的任何内容(,希望接受可能来自RemoteMessage
对象的哈希映射(当然,如果您只使用数据消息有效负载,则这样做。
不幸的是,你不能,而且在不久的将来没有支持它的迹象。
你可以做什么:我们所做的,是在你的服务器中构建一个API命令,它会向你发送一个测试推送。支持会很乏味,但这已经很好了。
更糟糕的是:假设进行测试是为了保证可靠性。如果失败了怎么办?您请求一个新的令牌,但 FCM 会给您相同的令牌,可能......但它不起作用!如果您使令牌无效并请求令牌 - 它会有所帮助吗?不确定。
你的选择确实是有限的。