在模拟器上使用Espresso测试Android工作室中的互联网连接错误处理

时间:2016-09-29 00:04:08

标签: android android-espresso

我正在Android Studio上使用Espresso在模拟器上测试我的应用程序的Instrumentation测试。我需要在测试中禁用互联网,以确保当用户没有互联网可用时我的错误处理功能正常工作。我已经搜遍了一个简单的方法,以编程方式从仿真设备禁用互联网。这是我最接近的,这是行不通的。

        WifiManager wifiManager = (WifiManager) mActivityRule.getActivity().getSystemService(Context.WIFI_SERVICE);
        wifiManager.setWifiEnabled(false);

即使在@Before代码块中调用它也不会做任何事情,并且我还在AndroidManifest.xml文件中设置了必要的权限来更改wifi设置。

2 个答案:

答案 0 :(得分:1)

通过测试,我们可以轻松地运行没有root访问权限的命令:

InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("svc wifi disable")
InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("svc data disable")

花点时间找出答案,并提供所有建议过时解决方案的答案和文章(API 29中已弃用wifiManager.setWifiEnabled)

答案 1 :(得分:0)

我最近遇到了类似的问题。我们通过使用依赖项注入解决了它,将逻辑作为依赖项注入。您可以注入WifiManager服务,由于该服务可能为null,因此风险很小,也可以注入处理逻辑的东西。

为简化Java / Kotlin与所选DI库之间的差异,此解决方案是伪代码:

public class AppHelper {
  public boolean isNetworkConnected(Context context) {
    // Do your check
    return isConnected;
  }
}

public class SomeActivity extends Activity {
  @Inject
  AppHelper appHelper;

  private void doNetworkStuff() {
    boolean connected = appHelper.isNetworkConnected(this);
    // implement your logic
  }
}

从那里,您可以模拟或操纵AppHelper的实例以实现所需的结果。

编辑:出于记录,我不容忍在Activity中进行网络操作。这只是为了简单地传达想法。