我正在开发一个用于Android的推送通知库(http://deaconproject.org/),它需要在网络连接中断或更改时采取措施-也就是说,它需要重新启动服务器连接或暂停其操作,直到网络连接可用。在"android.net.ConnectivityManager.CONNECTIVITY_ACTION".上使用Android BroadcastReceiver似乎可以很好地工作。
我的问题是在测试库时-我想自动测试库在各种配置条件下对断开的网络连接或从3G到WiFi的转换的响应。问题是,我不想整天坐在模拟器前敲F8。
有没有一种方法可以在jUnit测试中以编程方式操作安卓上的网络连接,而不需要切换飞行模式?我已经尝试通过控制台向模拟器发出命令,操纵GSM模式等,但当显示器上的电话状态发生变化时,互联网连接仍然有效。
发布于 2013-11-29 07:42:06
一个简单,但有点冗长和沉重的解决方案是在你的wifi连接状态监视器上添加一个抽象层。
添加一个实体(NetworkStateManager),它应该是一个应用程序作用域的单例(参见RoboGuice或Dagger到这一点,或者通过你的应用程序实例访问唯一的实例)。
使用可观察的观察者设计模式,向此实体添加注册和注销侦听器的方法。
每个活动都必须在onStart期间注册,在onStop中注销。
实体本身将由BroadCastReceiver修改。
这是完全可测试的,如果您使用DI框架,您将能够将可驱动存根注入到您的活动中,并查看它们对网络状态变化的反应。
https://stackoverflow.com/questions/3002886
复制相似问题