Jerseyで作成したRESTサービスをJUnitでテストする
Jersey Test Frameworkを使用する
Chapter 7. Jersey Test Framework
いくつか種類があるみたいですが今回使用したのは「jersey-test-framework-grizzly2」
pom.xmlに以下の依存関係を追加します。
<dependency> <groupId>com.sun.jersey.jersey-test-framework</groupId> <artifactId>jersey-test-framework-grizzly2</artifactId> <version>1.14</version> <scope>test</scope> </dependency>
Testクラスを書く
web.xmlでパスを切っていたのですがテストクラスではweb.xmlの指定は必要ないみたいです。
テストクラス作成時のWebResourceのパス指定にて「services/sample/login/id/pw」でなく
「sample/login/id/pw」となるので注意
リソースクラスの例
package jp.yustam.jersey.resources; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @Path("sample") public class MyService { @GET @Path("/login/{id}/{pw}") @Produces( { MediaType.TEXT_PLAIN }) public Response login(@PathParam("id") String id, @PathParam("pw") String pw) { return Response.ok().entity("OK").build(); } }
web.xmlの例
<servlet> <servlet-name>MyRESTService</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name> <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value> </init-param> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>jp.yustam.jersey.resources</param-value> </init-param> <init-param> <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>MyRESTService</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
テストクラスの例
package jp.yustam.jersey.resources; import static org.junit.Assert.assertEquals; import org.junit.Test; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.test.framework.JerseyTest; import com.sun.jersey.test.framework.WebAppDescriptor; public class MyServiceTest extends JerseyTest { public MyServiceTest() { super(new WebAppDescriptor.Builder("jp.yustam.jersey.resources").build()); } @Test public void testLogin() { WebResource wr = resource().path("sample/login/id/pw"); ClientResponse response = wr.get(ClientResponse.class); assertEquals(response.getEntity(String.class), "OK"); } }