其他分享
首页 > 其他分享> > android – 当RoSlectric在一个Service实例中调用getSystemService时的NPE

android – 当RoSlectric在一个Service实例中调用getSystemService时的NPE

作者:互联网

当我试图在Service实例中调用getSystemService时,它抛出了一个NPE.它在onCreate中调用:

Vibrator  vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);

我创建了这样的Service实例:

@Test
public void test() throws Exception{
    FooService service = new FooService();
    service.oncreate();//NPE in this line
    //... intent declaration
    service.onStartCommand(intent, 0, 1);
}

但是当我尝试将我的原始代码从服务实例itlef调用的getSystemService修改为xxApplication.getSystemService(XXX)时,它被应用程序调用,它没有抛出任何异常.
那么,如何在不修改原始代码的情况下正确测试服务?

解决方法:

@Test
public void test() throws Exception {
    ServiceController<FooService> serviceController = Robolectric.buildService(FooService.class);
    // ... intent declaration.
    serviceController.attach()  // Calls service.attach()
      .create() // Calls service.onCreate()
      .withIntent(intent)
      .startCommand(0, 1); // Calls service.onStartCommand(intent, 0, 1)
}

关键是在onCreate()之前调用attach().
任何人都不知道如何正确创建一个Service实例可以看到这个issue.

标签:android,testing,robolectric
来源: https://codeday.me/bug/20190830/1770360.html