2013-03-04 2 views
0

Я использую Apache Wink 1.2.1. Я бы хотел, чтобы модуль тестировал мою службу REST, и я предпочел бы сделать это, не используя RestClient. Я не нашел никакого примера, но после долгих поисков я догадался, что MockServletInvocationTest был правильной отправной точкой ... однако я не смог заставить его работать.Единичное тестирование Apache Wink Служба REST с помощью MockServletInvocationTest

Вот минимальный пример, который не подходит для меня.

Моя служба REST:

@Path("greetings") 
public class GreetingsResource { 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String hello() { 
     return "Hello World!"; 
    } 

} 

Соответствующий тест блок:

public class GreetingsResourceTest extends MockServletInvocationTest { 

    @Override 
    protected Class<?>[] getClasses() { 
     return new Class<?>[] { GreetingsResource.class }; 
    } 


    public void testHello() throws ServletException, IOException { 
     MockHttpServletRequest request = MockRequestConstructor. 
      constructMockRequest("GET", "/greetings", MediaType.TEXT_PLAIN); 
     MockHttpServletResponse response = invoke(request); 
     assertEquals(200, response.getStatus()); 
    } 

} 

Итак, у меня есть несколько вопросов:

  1. Собираюсь ли я в неправильном направлении ?

  2. Если я пойду в правильном направлении, то что я делаю неправильно? При выполнении предыдущего тестового случая я получаю следующее сообщение об ошибке (который я действительно не понимаю):

java.lang.NoSuchMethodError: javax/servlet/http/HttpServletResponse.getContentType()Ljava/lang/String; at org.apache.wink.server.internal.handlers.FlushResultHandler$FlushHeadersOutputStream.flushHeaders(FlushResultHandler.java:350) ~[wink-server-1.2.1-incubating.jar:1.2.1-incubating]

ответ

2

я обнаружил, что моя проблема была, и я просто оставить записку здесь, в случае, если кто имел та же проблема.

Вот почему я получил NoSuchMethodError:

  • Я использую Apache Maven для обработки зависимостей
  • использовать MockHttpServletRequest и MockHttpServletResponse я включил зависимость к весенне-макет 2.0.8:

    <dependency> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-mock</artifactId> 
        <version>2.0.8</version> 
        <scope>test</scope> 
    </dependency> 
    
  • К сожалению Spring-mock 2.0.8 имеет зависимость от commons-logging 1.1, которая, в свою очередь, имеет зависимость от servlet-ap i 2.3, в котором javax/servlet/http/HttpServletResponse.getContentType()Ljava/lang/String не существует! Этот метод существует с сервлет-апи 2,4

Таким образом, чтобы решить мою проблему, я просто добавил явную зависимость в сервлет-API 2.4 с помощью теста области видимости! Теперь мой модульный тест работает без проблем!

+0

Как вы выяснили ошибку зависимостей? 'maven tree'? –

+0

@bubuzzz: Я, честно говоря, не помню, как я это понял :) ... Наверное, потому что я был в отчаянии, и начал изучать все дерево зависимостей Maven. – MarcoS

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

  • Нет связанных вопросов^_^