sos*_*xme 12 testing tdd instrumentation android broadcastreceiver
也许我错过了什么.我想为BroadcastReceiver编写测试用例; 具体来说,它是用于接收BOOT_COMPLETED事件并为另一个接收器设置警报以便稍后处理; 它似乎没有正确设置,但重点是我没有明显的方法来测试它.我无法完全附加调试器并等待BOOT_COMPLETED,我无法发送假的BOOT_COMPLETED广播.
为什么有Activity,Service和Provider的检测类,而不是BroadcastReceiver?有什么建议可以测试吗?
Dav*_*röm 20
BroadcastReceiver的生命周期没有什么神奇之处.用AndroidTestCase测试它就足够了.在测试用例中,实例化您的BroadcastReceiver,创建您要发送的任何Intent,并使用AndroidTestCase提供的Context或某些模拟Context调用onReceive.
例如
public class TestMyBroadcastReceiver extends AndroidTestCase {
public void testReceive() {
MyBroadcastReceiver r = new MyBroadcastReceiver();
Intent i = new Intent("MY_ACTION");
// TODO put extras
r.onReceive(getContext(), i);
// TODO query application state to verify results
}
}
Run Code Online (Sandbox Code Playgroud)
对于大多数情况,我完全同意/sf/answers/362670731/
然而,有些情况下延伸AndroidTestCase不适合(并且可能引起意外).特别是,如果您正在进行更复杂的集成测试,并希望BroadcastReceiver使用Intent系统发送的实际测试.主要原因是onReceive广播接收器中的方法在主应用程序线程上AndroidTestCase运行,而测试在另一个线程中运行.这可能会导致代码中与测试相关的线程问题无法在多个线程上运行.
对此的解决方案是从中继承测试,InstrumentationTestCase并使用@UiThreadTest注释使测试在与onReceive方法相同的线程上运行.
有关更多信息(和示例),请参阅:http: //olafurhelgason.blogspot.com/2012/12/threading-and-android-integration.html