我可以真正启用和禁用网络访问中间测试吗?
问题描述:
我想编写自动化测试以在仿真器上运行,以验证当网络连接自动断开时我的应用程序正常运行。为此,我想编写如下测试:我可以真正启用和禁用网络访问中间测试吗?
- 启用网络连接。
- 启动一些应用程序网络操作,例如长文件下载。
- 禁用网络连接。
- 验证是否显示丢失的网络连接对话框。
我已经看到了各种各样的*答案,通过建议通过命令行手动禁用主机PC的网络连接来解决这个问题。这不能通过在仿真器上运行的测试来自动执行,因为仿真器无法访问其主机PC。并且在主机PC shell脚本中运行命令将很难尝试自动与仿真器测试同步。
或者,我已经看到了建议操纵仿真器的网络设置的答案,这显然实际上并不禁用访问,但它们只会导致显式连接检查,如networkInfo.isConnected()
报告断开状态。他们仍然允许双向通信。 (例如,当模拟器网络访问被禁用时,浏览器仍然是全功能的。)
有没有人能够构建在模拟器上运行的自动测试,并根据需要实际打开和关闭网络访问中间测试?
答
如果您不反对调用未公开的方法,则可以执行以下操作来关闭/打开数据连接。
public void enableData(Context context, boolean enable) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
try {
Method m = cm.getClass().getDeclaredMethod("setMobileDataEnabled", boolean.class);
m.invoke(cm, enable);
} catch (Exception e) {
}
}
我对此并不反感,但它实际上是否阻止了仿真器上的网络访问? – 2012-08-17 14:25:05
我不确定模拟器,但在设备上它就像在设置下切换“数据已启用”复选框。 – 2012-08-17 14:26:48
尝试在仿真器的“设置”中手动取消选中此复选框,然后查看网络是否已混淆。如果有效,那么上面的代码也可以工作。 – 2012-08-17 14:31:31