Тестирование Spring Framework 4 с Servlet 2.5

У меня возникла проблема с получением Spring Framework 4 для работы с моим существующим проектом с использованием Servlet 2.5. Мой веб-проект на самом деле работает нормально, но мои тестовые тесты не работают, и это вызвано MockHttpServletRequest, которое генерирует это исключение: -

java.lang.NoClassDefFoundError: javax/servlet/AsyncContext
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)

Я попытался добавить либо зависимость, но я получу другие связанные с Servlet 3.0 исключения: -

<dependency>
 <groupId>javax</groupId>
 <artifactId>javaee-api</artifactId>
 <version>6.0</version>
 <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>servlet-api</artifactId>
  <version>3.0.20090124</version>
  <scope>test</scope>
</dependency>

На основе веб-сайта Spring Framework он работает с Servlet 2.5. Однако Spring 4 MockHttpServletRequest, похоже, полагается на Servlet 3.0 вперед.

Как исправить эту проблему? Спасибо.

Ответ 1

Ограничьте зависимости для spring -test до версии до 4, например spring -test-3.2.

Я не знал, что spring -4 потерял поддержку Servlet-2.5. 3.9 Улучшения в тестировании гласит:

Начиная с Spring 4.0, набор mocks в пакете org.springframework.mock.web теперь совместим с Servlet 3.0.

Я не понимаю, что "совместимый с сервлета-3" означает сброшенную поддержку сервлета-2,5. Если это было намеренно, оно должно по крайней мере пойти в справочную документацию. Таким образом, возможно, даже стоит записать ошибку (SPR-11292).

Но подождите 3.4 Java EE 6 и 7:

Java EE версии 6 или выше теперь считается базой для Spring Framework 4, при этом спецификации JPA 2.0 и Servlet 3.0 имеют особую актуальность. [..] можно развернуть приложение Spring в Среда Servlet 2.5; однако Servlet 3.0+ рекомендуется, когда это возможно.

Поэтому я считаю, что это соответствует требованиям, указанным в документации.


Update: Справочная документация Spring 4.0.1 теперь более понятна в отношении Mocks:

Сервлеты 3.0+ настоятельно рекомендуются и необходимы в Spring тестовых и макетных пакетах для тестовых установок в средах разработки.