Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在Expresso测试中等待BroadcastReceiver接收消息_Android_Unit Testing_Broadcastreceiver_Android Espresso - Fatal编程技术网

Android 如何在Expresso测试中等待BroadcastReceiver接收消息

Android 如何在Expresso测试中等待BroadcastReceiver接收消息,android,unit-testing,broadcastreceiver,android-espresso,Android,Unit Testing,Broadcastreceiver,Android Espresso,Expresso不会等待消息被传递,因此在对操作进行断言之前,接口不会被更新。 如何强制它等待?在这种情况下,似乎没有办法强制express等待,或者至少,我可以找到它。我找到的解决方案是使用方法sendBroadcastSync而不是sendBroadcast发送同步消息 为了避免代码有臭味,我将LocalBroadcastManager包装在一个抽象中,并在测试中用它的模拟版本替换了包装器,因此它可以有不同的测试行为。我得出了相同的结论。我在做一些仪器测试,并使用Mockito监视广播接收器

Expresso不会等待消息被传递,因此在对操作进行断言之前,接口不会被更新。
如何强制它等待?

在这种情况下,似乎没有办法强制express等待,或者至少,我可以找到它。我找到的解决方案是使用方法
sendBroadcastSync
而不是
sendBroadcast
发送同步消息


为了避免代码有臭味,我将LocalBroadcastManager包装在一个抽象中,并在测试中用它的模拟版本替换了包装器,因此它可以有不同的测试行为。

我得出了相同的结论。我在做一些仪器测试,并使用Mockito监视
广播接收器
,捕获
接收
方法中传递的
意图
并进行验证-这是可行的,但仍然觉得这应该更容易,或者至少是一种框架标准的测试方法。我认为问题在于测试框架是如何设计的。它以线程处于空闲状态时应用程序达到最终状态为前提。像广播这样的异步调用可以在应用程序完成对测试刺激作出反应之前将线程置于空闲状态