4

我想编写自动化测试以在模拟器上运行,以验证我的应用程序在网络连接自发断开时是否正常运行。为此,我想编写如下测试:

  1. 启用网络连接。
  2. 开始一些app网络操作,比如长文件下载。
  3. 禁用网络连接。
  4. 确认显示丢失的网络连接对话框。

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

或者,我看到了建议操纵模拟器的网络设置的答案,这些设置显然并没有真正禁用访问,它们只会导致显式networkInfo.isConnected()的连接检查,比如报告断开状态。它们仍然允许双向通信。(例如,当模拟器网络访问被禁用时,浏览器仍然可以正常工作。)

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

4

2 回答 2

3

目前没有办法在单元测试中以编程方式真正禁用网络访问。我为此问题提交了增强请求。

于 2012-08-31T13:28:57.263 回答
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) {
    }
}   
于 2012-08-17T14:23:25.147 回答