我正在使用GCM(Google Cloud Messaging)將通知發送到Android應用程序。我的服務器使用Google提供的gcm-server.jar
,我遵循documentation。我能夠發送通知沒有問題的設備。Java服務器端單元測試GCM的結果
現在我試圖基於從PushNotificationDaoGcmImpl
的專用方法sendNotificationToServer
返回的Result
(source)進行單元測試業務邏輯。
我知道Result
不能被模擬,因爲它是一個final
類,並且簡單地將它實例化爲new Result()
將不起作用,因爲沒有公共構造函數。在package com.google.android.gcm.server;
之外,Result
內部Builder
類是無法訪問的,所以我不能用這種方式構建對象。
我找不到創建Result
的好方法,它是從Sender
(source)返回的內容。
我的問題是我將如何去單元測試PushNotificationDaoGcmImpl
處理某些條件的基礎上Result
?
public class PushNotificationDaoGcmImpl{
//method I'm trying to test
public void sendPushNotification(){
// builds message to send
Result result = this.sendNotificationToServer(gcmMessage, deviceToken)
//handle result's error conditions
}
//method call I'm trying to mock
private Result sendNotificationToServer(Message gcmMessage, String deviceToken){
return gcmSender.send(gcmMessage, deviceToken, 1);
}
}
//test snipet
@Test
public void testSendNotificationToServer() throws Exception {
Result result = new Result();
PushNotificationMessage message = new PushNotificationMessage("123", "Test", "deviceToken", "Android");
//Having issue with how to handle Result here
doReturn(result).when(gcmPushNotificationDaoSpy).sendNotificationToServer(any(Message.class), anyString());
PushNotificationResult result = gcmPushNotificationDaoSpy.sendPushNotification(message);
//verify business logic was correct based on Result
}