2

私のアプリでは、JSON を POST リクエストでサーバーに送信します。

正しい値を送信していることを確認するためにテストしたいと思います。

私は Robolectric を使用しているので、私の結論は、FakeHttpLayer に送信されている要求を取得し、JSON を取り出して、それが私の期待と一致することをテストする必要があるということです。

簡単に聞こえますが、投稿した JSON を確認する方法を理解するのに非常に苦労しています。

私のコードは漠然と次のようになります。

HttpClient client = new DefaultHttpClient();
HttpResponse response;
JSONObject json = new JSONObject();
try{
    HttpPost post = new HttpPost("http://google.com");
    json.put("blah", "blah");
    StringEntity se = new StringEntity( "JSON: " + json.toString());
    se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
    post.setEntity(se);
    response = client.execute(post);
} catch(Exception e){
  e.printStackTrace();
}

みたいなものが欲しい

assertTrue(myRequestJSON.matches("blah"));

しかし、私はそれを内部の何かを使って得ることができないようです

Robolectric.getFakeHttpLayer().getLastSentHttpRequestInfo();

...またはその上の他のバリエーションのいずれか。

ヘルプ?

ところで、私のテスト アプローチが間違っていると思われる場合は、これについて別の方法で考えることにオープンです。

ありがとうございました!

編集:ダミーコードに「myRequestJSON」ではなく「myResponseJSON」があることに気付きました。これにより、不明確になった可能性があります-修正されました。

4

1 に答える 1

2

以前のソリューションでは完全に間違っていました。これはかなり簡単に実行できます。Robolectric のサンプル コードで (予想通り) 解決策を見つけました。

HttpPost sentHttpRequest = (HttpPost) Robolectric.getSentHttpRequest(0);
StringEntity entity = (StringEntity) sentHttpRequest.getEntity();
String sentPostBody = fromStream(entity.getContent());
assertThat(sentPostBody, equalTo("a post body"));
assertThat(entity.getContentType().getValue(), equalTo("text/plain; charset=UTF-8"));

ここから)

于 2013-02-01T09:53:12.033 に答える