2012-08-17 25 views
3

我想编写自动化测试以在仿真器上运行,以验证当网络连接自动断开时我的应用程序正常运行。为此,我想编写如下测试:我可以真正启用和禁用网络访问中间测试吗?

  1. 启用网络连接。
  2. 启动一些应用程序网络操作,例如长文件下载。
  3. 禁用网络连接。
  4. 验证是否显示丢失的网络连接对话框。

我已经看到了各种各样的stackoverflow答案,通过建议通过命令行手动禁用主机PC的网络连接来解决这个问题。这不能通过在仿真器上运行的测试来自动执行,因为仿真器无法访问其主机PC。并且在主机PC shell脚本中运行命令将很难尝试自动与仿真器测试同步。

或者,我已经看到了建议操纵仿真器的网络设置的答案,这显然实际上并不禁用访问,但它们只会导致显式连接检查,如networkInfo.isConnected()报告断开状态。他们仍然允许双向通信。 (例如,当模拟器网络访问被禁用时,浏览器仍然是全功能的。)

有没有人能够构建在模拟器上运行的自动测试,并根据需要实际打开和关闭网络访问中间测试?

回答

2

目前没有办法从单元测试中以编程方式真正禁用网络访问。我为此问题提交了一个enhancement request

1

如果您不反对调用未公开的方法,则可以执行以下操作来关闭/打开数据连接。

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) { 
    } 
} 
+0

我对此并不反感,但它实际上是否阻止了仿真器上的网络访问? – 2012-08-17 14:25:05

+0

我不确定模拟器,但在设备上它就像在设置下切换“数据已启用”复选框。 – 2012-08-17 14:26:48

+0

尝试在仿真器的“设置”中手动取消选中此复选框,然后查看网络是否已混淆。如果有效,那么上面的代码也可以工作。 – 2012-08-17 14:31:31

相关问题