2013-03-28 4 views
2

Я пытаюсь проверить, что представление, возвращенное из ресурса drowpizard, собирается правильно. В частности, представление для добавления пользователя имеет поле, которое позволяет проверять паролем отказ от попытки создать пользователя, если он не отвечает определенным правилам. Представление отлично работает при развертывании и запуске webapp и указании неверного пароля, но когда я пытаюсь выполнить его тестирование, он выдает исключение веб-приложения, в котором нет сообщения для автора сообщения.Тестирование единиц измерения в dropwizard

Мой блок тест довольно прост:

@Test 
public void testBadPassword(){ 
    ClientResponse response = null; 
    try { 
     response=client().resource("/users").post(ClientResponse.class, createUserParameters); 
     Status status = response.getClientResponseStatus(); 
     assertEquals(Status.SEE_OTHER, status); 
    } finally { 
     if (response != null) { 
      response.close(); 
     } 
    } 
} 

я возвращусь ошибку сервера 500, который погребен в следующем:

javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class com.seeker.stm.resources.views.AddUserView, and Java type class com.seeker.stm.resources.views.AddUserView, and MIME media type text/html was not found 
    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:285) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1448) 

Ресурс обработает запрос и формирование мнения и ответы выглядят следующим образом:

@Path("/users") 
public class UserResource { 

    public Object addUser(@FormParam("username") String username, 
     @FormParam("password") String password, 
     @FormParam("email") String email){ 
    Set<String> passwordErrors = passwordChecker.checkValidity(password, username, email); 
    if (!passwordErrors.isEmpty()) {    
     return new AddUserView(userDAO.getAllActive(), passwordErrors); 
    } 

    // ... 
} 

Я могу понять исключение (th которые он знает, например, StringProvider и ByteArrayProvider, не работают для ответа или представления или что-то в этом роде), но я хотел бы больше узнать, как правильно протестировать ресурс, который может вернуть либо код ответа, либо представление.

ответ

4

Вам необходимо добавить addProvider(ViewMessageBodyWriter.class); в ваш setUpResources.

ViewMessageBodyWriter добавлено в качестве поставщика услуг ViewBundle, поэтому он работает в вашем сервисе (где у вас, вероятно, есть bootstrap.addBundle(new ViewBundle());).

+0

Спасибо, я попробую, когда вернусь к работе. – whiterook6

+0

Спасибо, что исправлено это исключение. Теперь я получаю аналогичное исключение из-за отсутствия чтения READER тела сообщения и просмотра пула представлений, похоже, ничего подобного нет. Есть ли другой поставщик, которого мне нужно добавить, или какую-то аннотацию, которую мне нужно предоставить, чтобы получить модульный тест? – whiterook6

+1

Похоже, что Coda вы исправили: https://groups.google.com/forum/#!topic/dropwizard-user/fGjawn1HTzQ –

0

Я использую dropwizard 0.8.0-rc3, и мои взгляды основаны на шаблоне freemarker. Я попробовал это и продолжал получать исключения. Что, наконец, получил это работает для меня вызовом

.addProvider(new ViewMessageBodyWriter(new MetricRegistry(), Collections.singleton(new FreemarkerViewRenderer()))) 

на моем ResourceTestRule.builder().

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