web-dev-qa-db-ja.com

ユニットテストジャージーRestful Services

ユニットテストは初めてで、プロジェクトのジャージサービスをいくつかテストしたいです。 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バージョンを使用しています。

ヘルプをいただければ幸いです:)

28
Unknown

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。

17
emgsilva

注釈を無視して、必要なパラメーターを渡す通常の単体テストを作成するだけです。私が思った戻り値は、通常「javax.ws.rs.core.Response」タイプです...使用できるgetEntity()メソッドがあります。この場合も、MockitoなどのMockオブジェクトフレームワークを使用すると便利です。

8
Neeraj Krishna

第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);
    }
}
3
MariuszS