如何从仪器测试发送广播意图

时间:2017-04-17 14:04:18

标签: android android-intent broadcastreceiver automated-tests

有两个应用程序在后台运行,并使用广播意图相互通信。现在,我需要创建一些仪器测试来覆盖设备上的通信功能。

在测试中,我需要,例如,发送特定的广播意图并检查广播接收器是否得到它(比较广播接收器中的获取意图类型与发送的等)。

问题在于,当我在@Test尝试发送广播注册广播接收器等时,我得到了:

  

无法解析方法'registerReceiver(com ... MyBroadcastReceiver,com.content.IntentFilter)'

     

无法解析方法'sendBroadcast(com.content.Intent)'

     

...

如何才能在仪器测试中使用此类功能?测试类是否应该从某些特定类继承?

提前致谢!

2 个答案:

答案 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)