我正试图用JUnit和Mockito对我正在构建的springREST Web服务进行测试。我在尝试运行JUnit测试时遇到了一个错误,找不到任何关于这个问题的信息。stacktrace将错误行列为.andDo(print())
,尽管我直接从spring.io教程中得到了这一行http://spring.io/guides/tutorials/rest/3/
测试等级代码:
public class TestSuite {
MockMvc mockMvc;
@Mock
RestController controller;
@Before
public void setup(){
MockitoAnnotations.initMocks(this);
this.mockMvc = standaloneSetup(controller)
.setMessageConverters(new MappingJackson2HttpMessageConverter()).build();
}
@Test
public void testREST() throws Exception {
when(controller.getThing(any(Integer.class))).thenReturn(TestFixture.getREST(1));
this.mockMvc.perform(get("/{number}", String.valueOf(number))
.accept(MediaType.APPLICATION_JSON))
.andDo(print())
.andExpect(status().isNotFound());
}}
Stacktrace:
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted()Z
at org.springframework.test.web.servlet.result.PrintingResultHandler.printAsyncResult(PrintingResultHandler.java:131)
at org.springframework.test.web.servlet.result.PrintingResultHandler.handle(PrintingResultHandler.java:80)
at org.springframework.test.web.servlet.MockMvc$1.andDo(MockMvc.java:155)
at org.company.test.TestSuite.testREST(TestSuite.java:53)`
您使用的是旧版本的Servlet规范(例如,2.5);而您正在使用的spring-test
版本至少需要Servlet 3.0。
如参考手册测试改进部分所述,
从Spring4.0开始,
org.springframework.mock.web
包中的一组mock现在基于Servlet3.0neneneba API。
因此,尽管Spring Framework 4.0和4.1支持用于部署的Servlet 2.5,但spring-test
模块中的Servlet API mock和Spring MVC测试框架需要Servlet 3.0(特别是3.0.1或更高版本)。
问候,
Sam(spring-test
模块负责人)
我收到这个错误是因为对servlet的依赖关系没有添加到我的pom.xml中添加接下来的几行解决了我的问题
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>test</scope>
</dependency>