bac*_*dev 6 java android robolectric
我正在研究一个使用Robolectric进行单元测试的Android项目.
我没有禁用互联网连接工作.
我有一个方法,它使用HttpUrlConnection向HTTP服务器发送请求并从HTTP服务器获取响应:boolean sendRequest().如果请求成功,则返回true.
private boolean sendRequest() throws Exception
{
URL url = new URL("http://example.com");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection( );
int statusCode = urlConnection.getResponseCode( );
return statusCode == 200;
}
Run Code Online (Sandbox Code Playgroud)
在帮助器类中,我有两种方法:void setConnectivity(boolean enable)和boolean checkConnectivity().
public static void setConnectivity( boolean enabled) throws Exception
{
Context context = Robolectric.application.getApplicationContext();
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
Robolectric.shadowOf(wifiManager).setWifiEnabled(enabled);
wifiManager = (WifiManager) Robolectric.application.getSystemService(Context.WIFI_SERVICE);
Robolectric.shadowOf(wifiManager).setWifiEnabled(enabled);
ConnectivityManager dataManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
Robolectric.shadowOf(dataManager).setBackgroundDataSetting(enabled);
dataManager = (ConnectivityManager)Robolectric.application.getSystemService(Context.CONNECTIVITY_SERVICE);
Robolectric.shadowOf(dataManager).setBackgroundDataSetting(enabled);
Robolectric.shadowOf(dataManager.getActiveNetworkInfo()).setConnectionStatus(enabled);
Intent connIntent = new Intent(ConnectivityManager.CONNECTIVITY_ACTION);
connIntent.putExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, enabled);
Robolectric.getShadowApplication().sendBroadcast(connIntent);
ShadowSettings shadowSettings = new ShadowSettings();
shadowSettings.setWifiOn(enabled);
shadowSettings.setAirplaneMode(enabled);
}
public static boolean checkConnectivity() throws Exception
{
Context context = Robolectric.application.getApplicationContext();
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifiNetwork != null && wifiNetwork.isConnected()) {
return true;
}
NetworkInfo mobileNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mobileNetwork != null && mobileNetwork.isConnected()) {
return true;
}
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnected()) {
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我已经打包了所有我能找到的通过Robolectric禁用互联网连接的setConnectivity()方法,当检查通过checkConnectivity()我得到预期的返回值时,BUT sendRequest()总是返回true,虽然我期望在禁用互联网连接时请求失败.
@Test
public void testConnectivity() throws Exception
{
setConnectivity(true);
assertTrue(checkConnectivity());
assertTrue(sendRequest());
setConnectivity(false);
assertFalse(checkConnectivity());
assertFalse(sendRequest()); // Assertion failed
}
Run Code Online (Sandbox Code Playgroud)
我错过了禁用互联网连接的Robolectric方法调用吗?或者也许我的整个方法都是错误的,实际的请求永远不会受到Robolectric设置的影响?
测试方法在Robolectric测试运行器的测试类中.
由于我的问题没有得到任何答案,而且我在网上找不到答案,我想这是不可能的。
我找到了一个 Stack Overflow 答案,它似乎解决了我想要实现的目标,尽管它不是使用 Robolectric,而是使用模拟框架:
回答“Robolectric:在测试中模拟网络错误”
| 归档时间: |
|
| 查看次数: |
1871 次 |
| 最近记录: |