我有一个服务来监听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

    }


我仍然得到同样的空异常

最佳答案

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

一般参考:


Unit tests with Mockito - Tutorial - Vogella
Mockito on Android step-by-step
Mocking library/framework that works best in Android?

关于java - 有没有一种方法可以测试Android服务中的公共(public)方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20167944/

10-11 05:06