1

我正在尝试模拟一个 HttpURLConnection 对象,但我似乎做错了。这是我想测试的方法。

@Override
public JSON connect() throws IOException {
    HttpURLConnection httpConnection;
    String finalUrl = url;
    URL urlObject = null;
    int status = 0;
    //recursively check for redirected uri if the given uri is moved
    do{
            urlObject = getURL(finalUrl);
            httpConnection = (HttpURLConnection) urlObject.openConnection();
            //httpConnection.setInstanceFollowRedirects(true);
            //httpConnection.connect();
            status = httpConnection.getResponseCode();
            if (300 > status && 400 < status){
                continue;
            }
            String redirectedUrl =    httpConnection.getHeaderField("Location");
            if(null == redirectedUrl){
                    break;
            }
            finalUrl =redirectedUrl;

    }while (httpConnection.getResponseCode() != HttpURLConnection.HTTP_OK);
    return  JSONSerializer.toJSON(getData(httpConnection).toString());
}

这是我所做的。

 @Before
public void setUp() throws Exception{
    //httpConnectGithubHandle = new HttpConnectGithub(VALID_URL);
    httpConnectGithubHandle = mock(HttpConnectGithub.class);
    testURL               = new URL(VALID_URL);
    mockHttpURLConnection = mock(HttpURLConnection.class);  
    mockInputStreamReader = mock(InputStreamReader.class);
    mockBufferedReader    = mock(BufferedReader.class);
    mockInputStream       = mock(InputStream.class);
    when(httpConnectGithubHandle.getData(mockHttpURLConnection)).thenReturn(SOME_STRING);
    when(httpConnectGithubHandle.getURL(SOME_STRING)).thenReturn(testURL);
    when(mockHttpURLConnection.getResponseCode()).thenReturn(200);
    when(mockHttpURLConnection.getHeaderField(LOCATION)).thenReturn(SOME_STRING);
    PowerMockito.whenNew(InputStreamReader.class)
    .withArguments(mockInputStream).thenReturn(mockInputStreamReader);
    PowerMockito.whenNew(BufferedReader.class)
      .withArguments(mockInputStreamReader).thenReturn(mockBufferedReader);  
    PowerMockito.when(mockBufferedReader.readLine())
    .thenReturn(JSON_STRING)
    .thenReturn(null);
}

那是我的设置方法。此方法调用的方法的测试用例是成功的。而我的实际测试用例如下。

 @Test
    public void testConnect() throws IOException {
        JSON jsonObject = httpConnectGithubHandle.connect();
        System.out.println(jsonObject);
        assertThat(jsonObject, instanceOf(JSON.class));
    }

我试图打印数据,它显示为空。

4

1 回答 1

2

目前你只是在测试模拟。httpConnectGithubHandle.connect()在模拟上调用并且模拟返回 null,因为没有定义任何行为。您应该在测试中使用真实HttpConnectGithub对象。(取消注释测试的第一行并删除HttpConnectGithub模拟。)

于 2013-10-25T22:35:18.150 回答