Java 用参数测试网络资源

Java 用参数测试网络资源,java,rest,jersey,integration-testing,Java,Rest,Jersey,Integration Testing,我在我的项目中使用了Jersey Resources,比如: @Path("/api") public class MyResource { @Path("/create") @POST @Consumes(MediaType.APPLICATION_XML) @Produces(MediaType.APPLICATION_XML) public Response handle(final String xml, @Context final Htt

我在我的项目中使用了Jersey Resources,比如:

@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个参数(字符串xml和HttpServletRequest)传递给测试中的资源?

我相信您不需要传递HttpServletRequest。
至于xml参数,我认为您应该有一个参数
其他类,而不仅仅是字符串类型。例如
项目、客户、订单,即任何业务对象(bean、POJO)

按照您现在的做法,您最好申报
@因为您声明
在方法中只需要一个字符串。通常在
如果需要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();
        }

    }

您是对的,我有用于将XML映射到它的POJO,但我仍然不明白应该如何将POJO传递给测试方法?我需要通过HttpServletRequest,因为我想在我的业务中测试它的一些参数logic@maxi1)您可以编写Java客户端并发布POJO,web上有很多示例。2) 但实际上,您甚至不需要Java客户端,您只需要一个表单,该表单将(方法)一些XML值发布到RESTful WS方法的URL(操作)@maxi让我试着为您编写一些示例。@maxi好的,我发布了一些示例代码。此WS使用XML,但生成JSON。您可以根据需要修改代码。谢谢!我成功地将我的XML传递给了Resources!但是HttpServletRequest呢?我也真的需要通过考试。