【发布时间】:2015-01-23 00:53:52
【问题描述】:
我正在使用 Robolectric 3.0 (ToT)。
在onCreate 的活动中,我拨打了以下电话:
mHandler.postDelayed(mRunnable, 10 * 60 * 1000)
然后在我的 Robolectric 测试用例中,我设置了活动,并且可运行对象立即启动(碰巧它调用 finish())。我怎样才能防止这种情况发生?
我使用了ShadowLooper.pauseMainLooper();,它可以防止触发Runnable,但这对我来说不是一个好的解决方案。我在测试中发送广播,当主循环暂停时,他们没有收到。当我取消暂停时,意图都被传递到广播接收器并且Runnable 运行。如何让广播接收器运行,而不是 延迟 Runnable.
【问题讨论】:
-
我能够用
robolectric 2.4重现同样的问题。我会在 Robolectric 问题跟踪器上创建票证(我看到你已经这样做了)并让他们了解问题。可能如预期。作为解决方法,我将创建和代理类来安排延迟事件并在测试中模拟它。编写额外的功能来通过测试并不好,但它应该可以工作 -
这个问题似乎出在Android自己的调度器中;我发现 Handler.postDelayed(foo, 1000) 在大约 200 毫秒后触发,至少在 Android 4.2 上是这样。
标签: android testing handler robolectric