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

问题描述 投票:0回答:2
我正在使用 Espresso 在模拟器上的 Android Studio 测试中为我的应用程序编写仪器测试。我需要在测试中禁用互联网,以确保当用户没有可用的互联网时我的错误处理功能可以正常工作。我到处寻找一种简单的方法来以编程方式从模拟设备禁用互联网。

这是我最接近的,但不起作用:

WifiManager wifiManager = (WifiManager) mActivityRule.getActivity().getSystemService(Context.WIFI_SERVICE); wifiManager.setWifiEnabled(false);
即使在 @Before 代码块中调用它也没有任何作用,而且我还在 AndroidManifest.xml 文件中设置了必要的权限来更改 wifi 设置。

android android-espresso
2个回答
13
投票
通过测试,我们可以轻松运行命令而无需 root 访问权限:

InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("svc wifi disable") InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("svc data disable")
我花了一段时间才找到它,所有这些答案和文章都建议过时的解决方案(wifiManager.setWifiEnabled 在 API 29 中已弃用)


0
投票
我最近遇到了类似的问题。我们通过使用依赖项注入来解决这个问题,将逻辑作为依赖项注入。您可以注入

WifiManager

 服务,这有一点风险,因为它可能为空,或者您可以注入处理逻辑的东西。 

为了简化 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

 中进行网络操作。这只是为了简单地传达这个想法。

© www.soinside.com 2019 - 2024. All rights reserved.