在我的活动中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(使用前将#替换为@)