ユニットテストは初めてで、プロジェクトのジャージサービスをいくつかテストしたいです。 Junitを使用しています。より良い方法でテストケースを書くように私を導いてください。
コード:
@GET
@Path("/getProducts/{companyID}/{companyName}/{date}")
@Produces(MediaType.APPLICATION_JSON)
public Object getProducts(@PathParam("companyID") final int companyID,
@PathParam("date") final String date, @PathParam("companyName") final String companyName)
throws IOException {
return productService.getProducts(companyID, companyName, date);
}
上記のサービスは正常に機能しているため、上記のメソッドをテストするためにjunitテストケースを作成します。上記のメソッドは、製品のリストを取得します(List<Product>
)JSON形式。応答ステータスとJSON形式を確認するテストケースを作成したいと思います。
注: Jersey 1.17.1バージョンを使用しています。
ヘルプをいただければ幸いです:)
Jersey Webサービスのテストには、いくつかのテストフレームワークがあります。つまり、Jersey Test Framework(既に他の回答で言及されています-バージョン1.17のドキュメントはこちら: https://jersey.Java.net/documentation/1.17/test -framework.html )and REST-Assured( https://code.google.com/p/rest-assured )-両方の比較/設定を参照してください( http://www.hascode.com/2011/09/rest-assured-vs-jersey-test-framework-testing-your-restful-web-services/ )。
REST-Assuredはより面白くて強力ですが、Jersey Test Frameworkも非常に使いやすいです。 「応答ステータスとjson形式をチェックする」テストケースを記述するREST-Assuredでは、次のテストを書くことができます(jUnitで行うのとよく似ています)。
package com.example.rest;
import static com.jayway.restassured.RestAssured.expect;
import groovyx.net.http.ContentType;
import org.junit.Before;
import org.junit.Test;
import com.jayway.restassured.RestAssured;
public class Products{
@Before
public void setUp(){
RestAssured.basePath = "http://localhost:8080";
}
@Test
public void testGetProducts(){
expect().statusCode(200).contentType(ContentType.JSON).when()
.get("/getProducts/companyid/companyname/12345088723");
}
}
これでうまくいくはずです... JSON固有の要素も非常に簡単に検証できます。その他の機能の手順については、REST-Assuredの非常に優れたガイドを確認してください( https://code.google.com/p/rest-assured/wiki/Usage )。別の良いチュートリアルはこれです http://www.hascode.com/2011/10/testing-restful-web-services-made-easy-using-the-rest-assured-framework/ 。
HTH。
注釈を無視して、必要なパラメーターを渡す通常の単体テストを作成するだけです。私が思った戻り値は、通常「javax.ws.rs.core.Response」タイプです...使用できるgetEntity()メソッドがあります。この場合も、MockitoなどのMockオブジェクトフレームワークを使用すると便利です。
第26章ジャージーテストフレームワーク に精通していますか?
public class SimpleTest extends JerseyTest {
@Path("hello")
public static class HelloResource {
@GET
public String getHello() {
return "Hello World!";
}
}
@Override
protected Application configure() {
return new ResourceConfig(HelloResource.class);
}
@Test
public void test() {
final String hello = target("hello").request().get(String.class);
assertEquals("Hello World!", hello);
}
}