问题描述
我正在使用Robolectric测试服务,该服务在其onCreate()方法中获取对LocationManager的引用,并在之后请求位置更新:
public void onCreate() {
super.onCreate();
// Other code...
lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
lm.requestSingleUpdate(LocationManager.GPS_PROVIDER, this, null);
// Other code...
}
问题是, NullPointerException
抛出在requestSingleUpdate()
。
我的测试是这样标注的:
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, emulateSdk = 19,
manifest = "src/main/AndroidManifest.xml")
请注意,这甚至发生在服务之外,在像这样的简单单元测试中:
@Test
public void test() {
Application app = RuntimeEnvironment.application;
LocationManager lm = (LocationManager) app.getSystemService(LOCATION_SERVICE);
lm.requestSingleUpdate(...);
}
问题出在哪儿? 还有另一种方法来测试使用诸如LocationManager之类的系统服务的组件吗?
1楼
我认为您需要通过ShadowLocationManager模拟它。