如何禁用/启用网络,切换到Android模拟器中的Wifi?

时间:2010-06-09 03:15:51

标签: android unit-testing testing networking

我正在开发针对Android的推送通知库(http://deaconproject.org/),如果网络连接中断或更改,则需要采取措施 - 即,它需要重新启动服务器连接或暂停其操作,直到网络连接可用。对于“android.net.ConnectivityManager.CONNECTIVITY_ACTION”,使用和Android BroadcastReceiver似乎工作得很好。

我的问题在于测试库 - 我想在各种配置条件下自动测试库对破坏的网络连接的响应,或从3G到WiFi的转换。问题是,我不想和模拟器坐在一起并整天打F8。

有没有办法在jUnit测试中以编程方式操作Android上的网络连接,而无需转换飞机模式?我已经尝试通过控制台向模拟器发出命令,操作GSM模式等,但是当显示屏上的手机状态发生变化时,互联网连接仍然保持正常。

5 个答案:

答案 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

enter image description here

答案 2 :(得分:4)

您可能也希望在eclipse中查看模拟器控件视图。我现在没有太多运气来杀死我的数据,但看起来应该

alt text

答案 3 :(得分:4)

不幸的是,没有办法以编程方式从单元测试中真正禁用网络访问。我为此问题提交了Android enhancement request

答案 4 :(得分:0)

一个简单但有点长而重的解决方案是在wifi连接状态监视器上添加一个抽象层。

添加一个实体(NetworkStateManager),它应该是一个应用程序作用域单例(请参阅RoboGuice或Dagger,或通过您的应用程序实例访问唯一实例)。

使用Observable Observer设计模式添加注册,注销该实体的方法。

每个活动都必须在onStart期间注册,在onStop中取消注册。

实体本身将由BroadCastReceiver修改。

这是完全可测试的,如果您使用DI框架,您将能够在您的活动中注入可驱动的存根,并了解它们对网络状态变化的反应。