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してるっぽい。固定のレスポンスを返してもらったりすることもできるみたい。
あとは公式読もう。
それかタウンページで調べろ!