我正在开发针对Android的推送通知库(http://deaconproject.org/),如果网络连接中断或更改,则需要采取措施 - 即,它需要重新启动服务器连接或暂停其操作,直到网络连接可用。对于“android.net.ConnectivityManager.CONNECTIVITY_ACTION”,使用和Android BroadcastReceiver似乎工作得很好。
我的问题在于测试库 - 我想在各种配置条件下自动测试库对破坏的网络连接的响应,或从3G到WiFi的转换。问题是,我不想和模拟器坐在一起并整天打F8。
有没有办法在jUnit测试中以编程方式操作Android上的网络连接,而无需转换飞机模式?我已经尝试通过控制台向模拟器发出命令,操作GSM模式等,但是当显示屏上的手机状态发生变化时,互联网连接仍然保持正常。
答案 0 :(得分:7)
右键单击“Project Explorer”面板中的项目,选择“Run As”,然后选择“Run Configurations”。
在模拟显示的窗口的左侧选择“Android Application”,在同一窗口的右侧,选择“Target”选项卡。
在窗口底部的“模拟器启动参数”部分中,您有大量有关互联网连接的选项。
我希望这会有所帮助。
伊戈尔
答案 1 :(得分:6)
我发现Android Dev Tools应用确实非常有用。
它允许您操作重要的系统设置,如网络连接。它甚至允许您设置一个自动打开和关闭wifi的时间间隔,从而允许您测试网络相关的广播接收器。
如果您想在真实环境中安装Dev Tools应用程序 在开发设备中,您可以从模拟器中复制应用程序 然后使用ADB将其安装在您的设备上。复制应用程序 从正在运行的模拟器中执行:
adb -e pull /system/app/Development.apk ./Development.apk
将.apk文件复制到当前目录中。然后安装它 在您连接的设备上:
adb -d install Development.apk
答案 2 :(得分:4)
您可能也希望在eclipse中查看模拟器控件视图。我现在没有太多运气来杀死我的数据,但看起来应该。
答案 3 :(得分:4)
不幸的是,没有办法以编程方式从单元测试中真正禁用网络访问。我为此问题提交了Android enhancement request。
答案 4 :(得分:0)
一个简单但有点长而重的解决方案是在wifi连接状态监视器上添加一个抽象层。
添加一个实体(NetworkStateManager),它应该是一个应用程序作用域单例(请参阅RoboGuice或Dagger,或通过您的应用程序实例访问唯一实例)。
使用Observable Observer设计模式添加注册,注销该实体的方法。
每个活动都必须在onStart期间注册,在onStop中取消注册。
实体本身将由BroadCastReceiver修改。
这是完全可测试的,如果您使用DI框架,您将能够在您的活动中注入可驱动的存根,并了解它们对网络状态变化的反应。