Androidアプリに通知を送信するためにGCM(Google Cloud Messaging)を使用しています。私のサーバーは提供されたGoogleを使用しており、ドキュメントgcm-server.jar
に従っています。デバイスに問題なく通知を送信できます。
今、私はのプライベートメソッドから返されたResult
(ソース)に基づいてビジネスロジックをユニットテストしようとしています。PushNotificationDaoGcmImpl
sendNotificationToServer
クラスでResult
あるためにモックすることはできず、パブリックコンストラクターがないため、単純にインスタンス化しても機能しないことを私は知っています。内部クラスは外部からアクセスできないため、その方法でオブジェクトを作成することはできません。 final
new Result()
Result
Builder
package com.google.android.gcm.server;
(sourceResult
)から返されるものを作成する良い方法が見つかりません。Sender
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
}