我的BroadcastReceiver
收到Intent.ACTION_NEW_OUTGOING_CALL
。它需要拨打this.setResultData(null)
,以便随后拨打该号码,如here所述。
这很好用。
如何使用Robolectric进行测试?
这就是我所拥有的:
// Create the intent
Intent myIntent = new Intent("Intent.ACTION_NEW_OUTGOING_CALL");
myIntent.putExtra(Intent.EXTRA_PHONE_NUMBER, "123");
// Find my BroadcastReceiver
List<BroadcastReceiver> receivers = ShadowApplication.getInstance().getReceiversForIntent(myIntent);
MyReceiver receiver = (MyReceiver)receivers.get(0);
// Invoke it - I understand this is the correct way to do it in a Robolectric test
Context context = ShadowApplication.geInstance().getApplicationContext();
receiver.onReceive(context, myIntent);
我的广播接收器已启动,但在调用setResultData()
时会引发异常:java.lang.IllegalStateException: Call while result is not pending
。这是因为基础BroadcastReceiver
的状态,因为setResultData()
- &gt; checkSynchronousHint()
发现mPendingResult==null
。
mPendingResult
只能由setPendingResult()
设置为非空,我无法调用(即使使用反射)。
测试BroadcastReceiver
需要致电setResultData()
的正确方法是什么?
答案 0 :(得分:0)
我已经尝试重现您的问题但无法解决。
但是,我无法通过 AndroidManifest.xml 让Robolectric获取BroadcastReceiver
。在测试中手动添加。
我觉得这样做很好。我会在 AndroidManifest.xml 中添加一些xml测试以进行正确的BroadcastReceiver
标记。测试android正确选择它仍然是我的最低优先级任务