我正在使用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这样的系统服务的组件?
答案 0 :(得分:0)
我认为你需要通过ShadowLocationManager来模拟它。