当前位置: 代码迷 >> java >> Robolectric:使用LocationManager的组件抛出NPE
  详细解决方案

Robolectric:使用LocationManager的组件抛出NPE

热度:118   发布时间:2023-07-16 17:46:06.0

我正在使用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之类的系统服务的组件吗?

我认为您需要通过ShadowLocationManager模拟它。