3

我有一个执行 HTTP GET 调用的应用程序,HttpGet我想模拟响应以测试不同的场景,而不必设置任何特定的本地服务器,就像远程服务器一样。

目标是进行非常高级的测试,就像真正的用户 ( Robotium ) 一样,并伪造应用程序调用真实服务器所获得的响应。如果您需要一个示例,就像测试 Twitter 客户端一样。

4

4 回答 4

3

好的,这就是我在我的 Robotium 测试中获得假 HttpResponses 所做的: - 我有一个类 HttpCallBuilder,它通常只返回一个 DefaultHttpClient - 我添加了一个 setHttpClient() 方法来在我的测试中设置一个 MockHttpClient(你需要实现(空)HttpClient接口中的很多方法,我这里省略了):

public class MockHttpClient implements HttpClient {

private static Context context;
private final BasicHttpParams params = new BasicHttpParams();

@Override
public HttpResponse execute(HttpUriRequest request) throws IOException,
        ClientProtocolException {
    InputStream mockInputStream = context.getAssets().open(
            MockResponses.forRequest(request));
    return new MockHttpResponse(mockInputStream);
}

@Override
public HttpParams getParams() {
    return params;
}

public static void setContext(Context applicationContext) {
    MockHttpClient.context = applicationContext;
}
}

MockResponses 允许您为您的 Mock 提供针对该情况的正确响应:

public class MockResponses {

private static final List<String[]> responseMapping = new ArrayList<String[]>();
private static final String BASE = "mocks/";

public static String forRequest(final HttpUriRequest request) {
    final String requestString = request.getURI().toString();
    for (final String[] mapping : responseMapping) {
        if (requestString.matches(mapping[0])) {
            return BASE + mapping[1];
        }
    }
    throw new IllegalArgumentException(
            "No mocked reply configured for request: " + requestString);
}

public static void forRequestDoAnswer(final String regex,
        final String fileToReturn) {
    responseMapping.add(new String[] { regex, fileToReturn });
}

public static void reset() {
    responseMapping.clear();
}
}

在您的测试中,您可以像这样准备测试:

HttpCallBuilder.setHttpClient(new MockHttpClient());
MockHttpClient.setContext(context);
MockResponses.reset();
MockResponses.forRequestDoAnswer(".*method=Login.*", "loginform.html");
于 2012-12-02T21:51:41.713 回答
2

Google 提供了一个名为 Mockwebserver 的库,可用于模拟 Web 服务响应。https://code.google.com/p/mockwebserver/你可以参考这个链接

于 2014-01-27T06:16:14.940 回答
1

使用Mockito怎么样?

根据这篇文章,它的最新版本应该支持 dalvik,所以你应该能够将它与 robotsium 一起使用。

使用 mockito,您可以模拟任何对象以返回您想要的任何内容。我发现它非常强大和简洁。

于 2012-12-02T22:05:21.993 回答
0

试试 XML Mimic,这将解决您的问题。它易于配置和作为独立服务器运行。

http://sourceforge.net/projects/xmlmimic/

于 2014-03-18T10:04:04.170 回答