gpt4 book ai didi

android - 如何使用 Robolectric 测试 BroadcastReceiver 的 setResultData()

转载 作者:太空狗 更新时间:2023-10-29 14:55:29 24 4
gpt4 key购买 nike

我的 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()->checkSynchronousHint() 发现 mPendingResult==null.

mPendingResult 仅由 setPendingResult() 设置为非空,我无法调用它(即使使用反射)。

请问测试需要调用setResultData()BroadcastReceiver的正确方法是什么?

最佳答案

我已尝试重现您的问题,但未能成功。

看看我的测试https://github.com/emartynov/robolectic-experiments/blob/master/robolectric-3.0-test/src/test/java/com/bijdorpstudio/myapplication/IncomingCallReceiverTest.java

但是,我无法让 Robolectric 从 AndroidManifest.xml 中获取 BroadcastReceiver。在测试中手动添加。

而且我认为这是可行的方法。我会在 AndroidManifest.xml 中为正确的 BroadcastReceiver 标记添加一些 xml 测试。测试 android 是否正确拾取它仍然是我最低优先级的任务

关于android - 如何使用 Robolectric 测试 BroadcastReceiver 的 setResultData(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31936857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com