【问题标题】:Can I truly enable and disable network access mid-test?我可以在测试中真正启用和禁用网络访问吗?
【发布时间】:2012-08-17 13:45:12
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: android integration-testing robotium


    【解决方案1】:

    目前无法在单元测试中以编程方式真正禁用网络访问。我为此问题提交了enhancement request

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我并不反对这个,但它真的会阻止模拟器上的网络访问吗?
      • 我不确定模拟器,但在设备上,它就像切换“设置”下的“启用数据”复选框。
      • 尝试在模拟器的设置中手动取消选中此复选框,看看网络是否已禁用。如果可以,那么上面的代码也可以。
      • 从我的问题来看,“我已经看到建议操纵模拟器的网络设置的答案,这显然不会真正禁用访问,它们只会导致显式连接检查报告断开状态。”跨度>
      猜你喜欢
      • 2013-10-25
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      相关资源
      最近更新 更多