我在Android Studios上使用Espresso在模拟器上测试我的应用程序的Instrumentation测试。我需要在测试中禁用互联网,以确保当用户没有互联网可用时我的错误处理功能正常工作。我已经搜索了一个简单的方法,以编程方式从模拟设备禁用互联网。这是我最接近的,这是行不通的。
WifiManager wifiManager = (WifiManager) mActivityRule.getActivity().getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(false);
即使在@Before代码块中调用它也不会做任何事情,并且我还在AndroidManifest.xml文件中设置了必要的权限来更改wifi设置。
我最近遇到了类似的问题。我们通过使用依赖注入解决了它,将逻辑注入为依赖。您可以注入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
完成。这只是为了简化这个想法。