Java 使用Robolectric更改Android连接

Java 使用Robolectric更改Android连接,java,android,robolectric,Java,Android,Robolectric,我正在从事一个Android项目,该项目使用Robolectric进行单元测试 我无法让禁用internet连接的功能正常工作 我有一个方法,它使用HttpUrlConnection向HTTP服务器发送请求并从HTTP服务器获取响应:boolean sendRequest()。如果请求成功,则返回true private boolean sendRequest() throws Exception { URL url = new URL("http://example.com");

我正在从事一个Android项目,该项目使用Robolectric进行单元测试

我无法让禁用internet连接的功能正常工作

我有一个方法,它使用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;
}
在助手类中,我有两个方法:
void setConnectivity(boolean enable)
boolean checkConnectivity()

我已经将通过Robolectric禁用internet连接的所有内容打包到
setConnectivity()
方法中,当通过
checkConnectivity()
进行检查时,我得到了预期的返回值,但
sendRequest()
始终返回true,尽管我预计在禁用internet连接时请求会失败

@Test
public void testConnectivity() throws Exception
{
    setConnectivity(true);
    assertTrue(checkConnectivity());
    assertTrue(sendRequest());

    setConnectivity(false);
    assertFalse(checkConnectivity());
    assertFalse(sendRequest()); // Assertion failed
}
我是否错过了用于禁用internet连接的Robolectric方法调用?或者也许我的整个方法都是错误的,实际的请求永远不会受到机器人分子设置的影响


测试方法是在一个有机器人分子测试跑步者的测试课上。

由于我的问题没有得到任何答案,而且我在网上找不到答案,我想这是不可能的

我找到了一个堆栈溢出的答案,它似乎解决了我想要实现的问题,尽管它不是用Robolectric,而是用一个模拟框架:

你的方法sendRequest()是做什么的?编辑了我的问题并添加了该方法的源代码(刚刚编写的-原始版本不同,但两者都有相同的问题)为什么你希望发送请求失败?通常,您包装网络代码时首先检查网络是否已连接1)我预计请求会失败,因为我认为使用
setConnectivity(false)
会禁用internet连接。我找不到任何信息,如果这是一个错误的假设或没有。2) 为了检查互联网连接,我需要一个上下文,但我正在开发一个SDK,不能要求开发人员提供一个。这就是为什么我有一个类似于上述sendRequest的方法,如果请求失败,我希望出现异常。这在设备上有效,但在我的单元测试中无效。这就是我问这个问题的原因:)@backendev看这里:
@Test
public void testConnectivity() throws Exception
{
    setConnectivity(true);
    assertTrue(checkConnectivity());
    assertTrue(sendRequest());

    setConnectivity(false);
    assertFalse(checkConnectivity());
    assertFalse(sendRequest()); // Assertion failed
}