Java なウェブアプリのテストをするための mech というライブラリを書いていた
https://github.com/tokuhirom/mech
@Test
public void testGoogle() throws Exception {
try (Mech mech = new Mech("http://google.com/")) {
try (MechResponse res = mech.get("/").execute()) {
assertEquals(200, res.getStatusCode());
}
}
}
こんな感じで使える。この使い方は本筋じゃなくて本当にやりたいのはこっち。
class MyServlet extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().write("Hello");
}
}
public class ServletTest {
@Test
public void test() throws Exception {
try (MechJettyServlet mech = new MechJettyServlet(new MyServlet())) {
try (MechResponse res = mech.get("/").execute()) {
assertEquals(200, res.getStatusCode());
assertEquals("Hello", res.getContentString());
}
}
}
}
適当につくったサーブレットを、ささっとテストできる。裏のスレッドで Jetty たてて、それベースでテストしてくれる。 便利~。
なかなか便利に使えるようになったんで、オープン&シェアさせていただきます。
JSON をポストしたい
try (MechResponse res = mech.postJSON("/json", form).execute()) {
assertEquals(200, res.getStatusCode());
assertEquals("+++{\n"
+ " \"name\" : \"hoge\"\n"
+ "}+++", res.getContentString());
}
JSON を受け取ったのを読み込みたい
Form form = res.readJSON(new TypeReference<Form>() {
});
Jackson でいい感じに処理できます。
POST したい
try (MechResponse res = mech.post("/postForm").param("name", "pp太郎")
.execute()) {
assertEquals(200, res.getStatusCode());
assertEquals("pp太郎", res.getContentString());
}
multipart/form-data でテストしたい
try (MechResponse res = mech.postMultipart("/postMultipart")
.param("name", "pp太郎").file("file", new File("pom.xml"))
.execute()) {
assertEquals(200, res.getStatusCode());
assertEquals("pp太郎XXXpom.xml", res.getContentString());
}
リクエストとレスポンスの具合を表示したい
mech.addRequestListener(new PrintRequestListener(ps));
うまいこと、全部経過を表示できる。これでテストした結果を、ドキュメントに貼ったりしてる。
Installation
<repositories>
<repository>
<id>tokuhirom</id>
<url>https://tokuhirom.github.io/maven/releases/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>me.geso</groupId>
<artifactId>mech</artifactId>
<version>0.7.1</version>
</dependency>
</dependencies>
pom.xml にこういう感じで書いてくだされ。
javadoc
http://tokuhirom.github.io/maven/javadoc/me/geso/mech/0.7.1/apidocs/index.html
このへんにおいてあります。