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