使用Servlet 2.5测试Spring Framework 4

lim*_*imc 15 java spring spring-test

我在使用Servlet 2.5让Spring Framework 4与我现有的项目一起工作时遇到了问题.我的web项目实际上运行正常,但我的测试用例失败并且它是由引起MockHttpServletRequest此异常引起的: -

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

我尝试添加任一依赖项,但我会得到其他与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>
Run Code Online (Sandbox Code Playgroud)

基于Spring Framework网站,它可以与Servlet 2.5一起使用.但是,Spring 4MockHttpServletRequest似乎依赖于Servlet 3.0.

我该如何解决这个问题?谢谢.

Mar*_*sch 21

将spring-test的依赖关系限制为4之前的版本,如spring-test-3.2.

我不知道Spring-4放弃了对Servlet-2.5的支持.3.9测试改进说:

从Spring 4.0开始,org.springframework.mock.web包中的模拟集现在与Servlet 3.0兼容.

我不明白"与servlet-3兼容"意味着删除了servlet-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+.

所以我认为这符合文档中提到的资格.


更新: Spring 4.0.1参考文档现在更清楚Mocks:

强烈建议使用Servlet 3.0+,这是Spring的测试和模拟包中的先决条件,用于开发环境中的测试设置.