使用参数测试Jersey资源

时间:2013-12-24 12:27:33

标签: java rest jersey integration-testing

我在项目中使用泽西资源,如:

@Path("/api")
  public class MyResource {

    @Path("/create")
    @POST
    @Consumes(MediaType.APPLICATION_XML)
    @Produces(MediaType.APPLICATION_XML)
    public Response handle(final String xml, @Context final HttpServletRequest request) {
.....
}

我正试图测试它:

public class MobipayResourceTest extends JerseyTest {

    private MockHttpServletRequest servletRequest;

    @Override
    @Before
    public void setUp() throws Exception {
        servletRequest = new MockHttpServletRequest();
        servletRequest.setMethod("POST");
    }

    public MobipayResourceTest() throws TestContainerException {
        super("ua.privatbank.mobipay.api.resource");
    }

    @Test
    public void testRes(){
        WebResource webResource = resource();
        webResource.path("/api/create").post(???); // I need to pass 2 parameters in the request - xml (in the body of post) and HttpServletRequest


    }

如何将2个参数(String xml和HttpServletRequest)传递给测试中的资源?

1 个答案:

答案 0 :(得分:0)

我相信你不需要传递HttpServletRequest 至于xml参数,我认为你应该有一个参数
那里的其他一些类,不仅仅是String类型。例如
Item,Customer,Order,即任何业务对象(bean,POJO)。

你现在的方式,你最好申报 @Consumes(MediaType.TEXT_PLAIN)因为你声明了这个 你希望你的方法中只有一个String。通常在什么时候 你期望XML,这个XML值被解组为
某种类型的对象(通常是bean,POJO等)。你
得到这个,你可以只使用该对象。

以下是Java客户端示例的一些示例代码。

    package com.company.api.test;

    import java.net.URI;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;

    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.core.UriBuilder;

    import com.google.gson.Gson;
    import com.sun.jersey.api.client.Client;
    import com.sun.jersey.api.client.WebResource;
    import com.sun.jersey.api.client.config.ClientConfig;
    import com.sun.jersey.api.client.config.DefaultClientConfig;
    import com.sun.jersey.api.client.filter.LoggingFilter;
    import com.company.common.DateUtil;
    import com.company.api.input.ItemOperation;
    import com.company.api.input.ItemOperationData;
    import com.company.api.result.ItemResult;

    public class JavaClientREST {

        public static void main(String[] args) throws Exception {
            ClientConfig config = new DefaultClientConfig();
            Client client = Client.create(config);
            client.addFilter(new LoggingFilter());

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

            WebResource service = client.resource(getBaseURI());

            ItemOperation op1 = new ItemOperation();
            op1.setItemID("447");
            Date d1 = DateUtil.getDate(2013, Calendar.DECEMBER, 20);
            System.out.println("DT1 = " + sdf.format(d1));
            op1.setDate(d1);
            op1.setOperation("pause");

            String res = service.path("Item")
                                .entity(op1, MediaType.APPLICATION_XML)
                                .accept(MediaType.APPLICATION_JSON)
                                .post(String.class);

            Gson gson = new Gson();
            ItemResult result = gson.fromJson(res, ItemResult.class);

            System.out.println("ID = [" + result.getId() + "]");
            System.out.println("Error = [" + result.getError() + "]");
            System.out.println("DONE!");
        }

        private static URI getBaseURI() {
            return UriBuilder.fromUri("http://localhost:8080/api/service").build();
        }

    }