を使用して HTTP GET 呼び出しを実行するアプリケーションがHttpGet
あり、リモートサーバーのように動作する特定のローカルサーバーをセットアップすることなく、さまざまなシナリオをテストするために応答をモックしたいと考えています。
目標は、実際のユーザー ( Robotium ) のように振る舞う非常に高レベルのテストを行い、アプリケーションが実際のサーバーを呼び出して取得する応答を偽造することです。例が必要な場合は、Twitter クライアントのテストによく似ています。
わかりました、これは私が Robotium テストで偽の HttpResponses を取得するために行ったことです: - 私はクラス HttpCallBuilder を持っています。 (空)ここでは省略した 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");
あなたの問題を解決する XML Mimic を試してみてください。構成が簡単で、独立したサーバーとして実行されます。