我得到了以下测试用例:
Intent intent = new Intent("test");
PendingIntent pendingIntent = PendingIntent.getBroadcast(getContext(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("test");
testReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
recieved=true;
}
};
getContext().registerReceiver(testReceiver,intentFilter );
pendingIntent.send();
Thread.sleep(100);
assertTrue(recieved);
有没有办法在没有 Thread.sleep 的情况下使这个测试通过?
最佳答案
您可以使用 CountDownLatch 来等待类似事件的发生。你用一个计数来初始化它。 await() 方法将等待计数达到 0。当计数达到 0 时,它们将停止阻塞(或者如果您指定超时,如果在计数达到 0 之前超时,它将返回 false)。
这是您修改后的示例代码以使用 CountDownLatch:
CountIntent intent = new Intent("test");
PendingIntent pendingIntent = PendingIntent.getBroadcast(getContext(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("test");
final CountDownLatch countDownLatch = new CountDownLatch(1);
testReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
countDownLatch.countDown();
}
};
getContext().registerReceiver(testReceiver,intentFilter );
pendingIntent.send();
assertTrue(countDownLatch.await(1, TimeUnit.SECONDS));
关于android - 不休眠测试 PendingIntent 发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24118544/