2017-01-04 2 views
3

Мне нужно выполнить некоторые тесты JUnit для моих служб отдыха. Например, это один из моих Rest услуг:Внедрение теста 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

Почему вы используете 'класс MachineResponse' в' Post' метод и передать строку в качестве второго параметра? –

+0

Строка - это json для передачи полезной нагрузки моего HTTP-запроса. – DistribuzioneGaussiana

+0

Вы не задали тип содержимого сообщения. По умолчанию это не приложение/json, поэтому ваш веб-сервис жалуется. На самом деле это хороший тест ... остальной структуры. – RealSkeptic

ответ

0

You может использовать простой JSONObject из org.json.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. –

Смежные вопросы