2017-01-04 93 views
3

我必须为休息服务实现一些JUnit测试。 比如这是我的休息服务之一:为休息服务实现JUnit测试

@Path("/dni-fe") 
public class HelloWorld 
{ 

    @POST 
    @Path("/home") 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 

    public MachineResponse doMachineRegister(MachineBean machineBean) 
    { 
     MachineResponse response = new MachineResponse(); 
     String name = machineBean.getName(); 
     String country = machineBean.getCountry(); 
     String company = machineBean.getCompany(); 
     String model = machineBean.getModel(); 

    //make some stuff and some queries on db to populate the response object 
    return response; 
    } 

这里是我对这个服务测试:

public class MachineResponseTest { 

    private static final String BASE_URI = "http://localhost:8080/dni-fe/home" 

    @Test 
    public void testDevice() { 

     WebResource resource = Client.create().resource(BASE_URI); 
     resource.accept(MediaType.APPLICATION_JSON); 

     StringBuilder sb = new StringBuilder(); 
     sb.append("{\"name\":\"123456\",\n"); 
     sb.append(" \"country\":\"Spain\",\n"); 
     sb.append(" \"company\":\"xxx\",\n"); 
     sb.append(" \"model\":\"1.10.0\"\n}");  

     MachineResponse result = resource.post(MachineResponse.class,sb.toString()); 
    } 

测试失败,出现以下错误:

com.sun.jersey.api.client.UniformInterfaceException: POST http://localhost:8080/dni-fe/home returned a response status of 415 Unsupported Media Type at com.sun.jersey.api.client.WebResource.handle(WebResource.java:686)

+0

你为什么用'POST'方法使用'MachineResponse'类并把字符串作为第二个参数? –

+0

该字符串是json传入我的http请求的有效负载。 – DistribuzioneGaussiana

+0

您没有设置帖子的内容类型。默认不是application/json,所以你的web服务会抱怨。其实这是一个很好的测试......其余框架。 – RealSkeptic

回答

0

你可以使用来自org.json.JSONObject的简单JSONObject并将数据作为toString传递给它。示例代码

JSONObject address = new JSONObject(); 
address.put("line1", address1); 
address.put("line2", address2); 
address.put("city", city); 
address.put("state", state); 
address.put("postalCode", zip); 
address.put("country", "US"); 
address.toString() 
1

我相当肯定,你必须使用.type(MediaType.APPLICATION_JSON),不.accept(

+0

正确,但我认为它也需要'.accept',因为控制器返回JSON。 –