Как проверить работоспособность сервлета 3.0 с аннотациями базового сервлета Tomcat 7 в Junit - PullRequest
3 голосов
/ 14 марта 2011

Я хочу написать тест junit для проверки поведения tomcat 7, связанного с аннотациями Servlet 3.0 (@WebServlet, @ServletSecurity).

То, что я имею до сих пор, это тест:

@Test
public void testDoGet()
     throws ServletException, LifecycleException, IOException {             
  Tomcat tomcat = new Tomcat();        
  tomcat.setPort(8080);        

  Context ctx = tomcat.addWebapp("/", 
     new File("target").getAbsolutePath());             
  Tomcat.addServlet(ctx, "hello", HelloServlet.class.getName());
  ctx.addServletMapping("/hello", "hello");     
  tomcat.start();

  ByteChunk chunk = new ByteChunk();        
  int responceCode = getUrl("http://127.0.0.1:8080/hello",chunk);

  System.out.println(responceCode + ": " + chunk.toString());

  tomcat.stop();
}

Этот тест работает, но он не учитывает аннотацию.

Понятно, что этот тест не учитывает примечания к HelloServlet. Но я понятия не имею, как «зарегистрировать» сервлет, чтобы использовать его конфигурацию на основе аннотаций. Кто-нибудь может дать мне подсказку, как построить тест, который это делает?

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

Я не совсем знаком с аннотациями Servlet 3.0, но, насколько я понимаю, вы помечаете класс как @WebServlet и комментируете метод одним из @GET, @POST и т. Д., Верно?

Если это так, то я не думаю, что модульное тестирование класса сервлета должно включать что-либо, связанное с контекстами, путями URL и т. Д. Если ваши тесты проверяют эту логику, то вы тестируете код и логику сервера приложений. а не ваш собственный класс.

В модульном тесте @WebServlet я бы остановился на тестировании методов, обрабатывающих запрос / ответ HTTP, и утверждаю, что при определенных входных данных (в запросе) ваш сервлет возвращает ожидаемый результат (в ответе).

1 голос
/ 14 марта 2011

Я не знаю, решает ли это проблему, но вы можете явно установить версию сервлета на 3.0:

ctx.setEffectiveMajorVersion(3);
ctx.setEffectiveMinorVersion(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...