我有一个服务监听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
}
我仍然得到相同的空异常
答案 0 :(得分:0)
处理这种情况的常用方法是使用模拟框架,在其中有效地模拟被测方法与之交互的上下文。因此,您可以模拟getApplicationContext()
以返回足以与SharedContext
一起使用的模拟上下文对象。
一般参考资料: