Java 用参数测试网络资源
我在我的项目中使用了Jersey Resources,比如: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
@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呢?我也真的需要通过考试。