JavaのHTTPクライアントとして有名なOkHttpですが、関連プロジェクトにMockWebServerという機能があります。
HTTPサーバとしてモックを提供するものになります。手順としては、、
- モックサーバとして返却するレスポンスのシナリオを書く
- モックサーバを起動する
- モックサーバのURLに対して、アプリケーションでアクセスする
- レスポンスが予期したものであることを検証する
といった形になります。とてもシンプルで使いやすいです。
なお、OkHttpの関連プロジェクトですが、クライアントはOkHttpである必要性はありません。なので、様々なHTTPクライアントからの通信をテストすることができます。
使い方
MockWebServerのサイトのサンプルコードを元に説明します。
まずは、MockWebServerを生成し、モックサーバとして返却するレスポンスを定義します。
MockWebServer server = new MockWebServer(); server.enqueue(new MockResponse().setBody("hello, world!")); server.enqueue(new MockResponse().setBody("sup, bra?")); server.enqueue(new MockResponse().setBody("yo dog"));
モックサーバを起動し、モックサーバのURLを取得します。
server.start();
HttpUrl baseUrl = server.url("/v1/chat/");
アプリケーションを実行します。この際に、モックサーバのURLに対してアクセスさせるように指定します。
Chat chat = new Chat(baseUrl);
chat.loadMore();
chat.loadMore();
chat.loadMore();
モックサーバで受け付けたリクエストを検証します。server.takeRequest()
で順番にリクエスト内容を取得できます。
RecordedRequest request1 = server.takeRequest(); assertEquals("/v1/chat/messages/", request1.getPath()); assertNotNull(request1.getHeader("Authorization")); RecordedRequest request2 = server.takeRequest(); assertEquals("/v1/chat/messages/2", request2.getPath()); RecordedRequest request3 = server.takeRequest(); assertEquals("/v1/chat/messages/3", request3.getPath());
最後にモックサーバを停止するのをお忘れなく。
server.shutdown();