読者です 読者をやめる 読者になる 読者になる

リア充爆発日記

You don't even know what ria-ju really is.

Unitテスト時にWebサーバに繋ぎたくなったらmockwebserver

Webサーバとつながないとテストできない。そういうテストしたいときってあるじゃない。

いや、そういうときは設計を見直すべきときも大いにあると思うけど、いやこれ絶対つながないと無理だって!という時にはこれ。
http://code.google.com/p/mockwebserver/

Google謹製です!

ケースによってはモック(テストダブル)使って逃げることもできると思うんだけど、モック使うとコードが読みにくくなりがちだし、モック自体も本質的なものではないから、できるだけ使うのは避けるべきだと思うんだよね。

  • 設計の見直し
  • モックよりこっち

と思えた人は使おうぜ!

maven使ってる人は楽ちんのちょろりでもう使える。

        <dependency>
            <groupId>com.google.mockwebserver</groupId>
            <artifactId>mockwebserver</artifactId>
            <version>20121111</version>
            <scope>test</scope>
        </dependency>
public class HttpClientTest {
    private static final MockWebServer mockWebServer = new MockWebServer();

    @BeforeClass
    public static void testSetup() throws IOException {
        mockWebServer.play();
    }

    @AfterClass
    public static void testCleanup() throws IOException {
        mockWebServer.shutdown();
    }

    @Test
    public void testCreateHttpClientForPost() throws Exception {
        URL url = mockWebServer.getUrl("/");
        HttpClient client = HttpClient.createHttpClient(url);
        assertThat(client.getRequestMethod(), equalTo("POST"));
    }

つなぐ準備だけだったらこんな感じ?
ソースみると0番ポートでListenしてるっぽい。固定のレスポンスを返してもらったりすることもできるみたい。

あとは公式読もう。

それかタウンページで調べろ!