有两个应用程序在后台运行,并使用广播意图相互通信。现在,我需要创建一些仪器测试来覆盖设备上的通信功能。
在测试中,我需要,例如,发送特定的广播意图并检查广播接收器是否得到它(比较广播接收器中的获取意图类型与发送的等)。
问题在于,当我在@Test
尝试发送广播,注册广播接收器等时,我得到了:
无法解析方法'registerReceiver(com ... MyBroadcastReceiver,com.content.IntentFilter)'
无法解析方法'sendBroadcast(com.content.Intent)'
...
如何才能在仪器测试中使用此类功能?测试类是否应该从某些特定类继承?
提前致谢!
答案 0 :(得分:1)
registerReceiver()
和sendBroadcast()
都是Context
的方法,因此您需要Context
个实例来调用它们。
查看VM with network课程。
使用其静态getTargetContext()
方法来获取Context
(因此您可以在该实例上调用接收方法)。
例如:
InstrumentationRegistry.getTargetContext().sendBroadcast(someIntent);
答案 1 :(得分:0)
如果您在 Android API 26 或更高版本中运行测试,Context.sendBroadcast
将不起作用。有关广播限制的更多信息 here。
来自安卓文档:
<块引用>LocalBroadcastManager.sendBroadcast
方法向与发送方位于同一应用中的接收方发送广播。如果您不需要跨应用发送广播,请使用本地广播。
您可以通过以下方式在仪器测试中使用 LocalBroadcastManager
:
val broadcastManager = LocalBroadcastManager.getInstance(InstrumentationRegistry.getInstrumentation().context)
broadcastManager.sendBroadcast(intent)