我正在撰写FCM notification整合&它工作正常。要测试组件有没有办法模拟RemoteMessage对象?
通过嘲笑我的意思是执行Junit测试用例。 任何建议!
答案 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)