我有一个使用HttpGet
执行HTTP GET调用的应用程序,我想模拟响应,以便测试不同的场景,而无需设置任何特定的本地服务器,就像远程服务器一样。
目标是进行非常高级别的测试,其行为类似于真实用户(Robotium),并伪造应用程序将获得的响应,调用真实服务器。就像测试Twitter客户端一样,如果你需要一个例子。
答案 0 :(得分: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允许您根据情况对正确的响应进行模拟:
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");
答案 1 :(得分:2)
Google提供了一个名为Mockwebserver的库,可用于模拟Web服务响应。 https://code.google.com/p/mockwebserver/您可以参考此链接
答案 2 :(得分:1)
如何使用Mockito?
根据this article,其最新版本应支持dalvik,因此您应该可以将其与robotium一起使用。
使用mockito,您可以模拟任何对象以返回您想要的任何内容。我发现它非常强大和简洁。
答案 3 :(得分:0)
尝试XML Mimic,这将解决您的问题。它易于配置并作为独立服务器运行。