Robolectric 中的 getSystemService 返回具有 null Context 的对象

2023-11-21

在我的活动中onCreate I have:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

当使用 Robolectric 测试活动时,我使用以下命令创建它

ActivityController<MainActivity> controller = Robolectric.buildActivity(MainActivity.class);
MainActivity activity = controller.attach().create().get();

The AudioManager然后创建但与mContext = null这导致了NullPointerException打电话时registerMediaButtonEventReceiver因为该框架方法在内部使用上下文。

有什么办法可以确保AudioManager是用一个工作创建的Context?


我对此进行了一些尝试,实际上我认为目前的答案是no, 不可能。

现在,如果目的是在创建活动时避免 NPE,那么对于 Robolectric 版本

    AudioManager mockManager= Mockito.mock(AudioManager.class);
    Application application = (Application) Robolectric.getShadowApplication().getApplicationContext();
    ShadowContextImpl shadowContext = (ShadowContextImpl) Robolectric.shadowOf(application.getBaseContext());
    shadowContext.setSystemService(Context.AUDIO_SERVICE, mockManager);

另一种变体可能是创建您自己的 Shadow AudioManager要么处理registerMediaButtonEventReceiver或使用正确的上下文进行初始化,因为当前的一个没有这样做,但我还没有真正尝试过。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Robolectric 中的 getSystemService 返回具有 null Context 的对象 的相关文章

随机推荐