有没有办法在Android服务中测试公共方法?

时间:2013-11-23 21:13:38

标签: java android testing junit

我有一个服务监听GCM消息并解析JSON。最终(取决于消息内容),它写入SharedPreferences,因此它需要getApplicationContext()

如果我对服务“作为常规对象”进行测试(创建服务,然后执行该方法),getApplicationContext()在运行测试时最终为null

如果我使用ServiceTestCase

    public void testHandleAuth() {

               // MyClass is tested
               Intent intent=new Intent("com.duniap.ptp.GcmIntentService");
               this.startService(intent);
               GcmIntentService tester = new GcmIntentService();
               // a dummy json encoded in base64
               dummyAuth64="eyJkZXZpY2UiOnsiaWQiOjU2LCJzZWNyZXQiOiJGc3VCcWZsdVFcL2l5bit5TlZadW5uZz09In0sImFjdGlvbiI6ImF1dGhvcml6ZSJ9";
               byte[] bytes = Base64.decode(dummyAuth64, Base64.DEFAULT);
               String dummyAuth = new String(bytes);
               tester.handleGCMmessage(dummyAuth);
                   //null pointer, if I debug I trace it to getApplicationContext() within this method

    }

我仍然得到相同的空异常

1 个答案:

答案 0 :(得分:0)

处理这种情况的常用方法是使用模拟框架,在其中有效地模拟被测方法与之交互的上下文。因此,您可以模拟getApplicationContext()以返回足以与SharedContext一起使用的模拟上下文对象。

一般参考资料: