java.lang.NoSuchMethodError:javaxservlet.http.HttpServletRequest.isAsyncStarted()Z

时间:2014-09-19 18:49:58

标签: java spring junit mockito spring-test

我正在尝试使用JUnit和Mockito对我正在构建的Spring REST Web服务进行测试。我在尝试运行JUnit测试时遇到了一个错误,但无法找到有关该问题的任何信息。堆栈跟踪将错误行列为.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());
}}

堆栈跟踪:

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)`

2 个答案:

答案 0 :(得分:7)

您正在使用较旧版本的Servlet规范(例如,2.5);然而,您使用的spring-test版本至少需要Servlet 3.0。

如参考手册的Testing Improvements部分所述,

  

从Spring 4.0开始,org.springframework.mock.web包中的一组模拟现在基于Servlet 3.0 API。

因此,虽然Spring Framework 4.0和4.1支持用于部署的Servlet 2.5 ,但是spring-test模块中的Servlet API模拟和 Spring MVC测试框架需要Servlet 3.0(特别是3.0.1或更高版本)。

此致

Sam(spring-test模块的负责人)

答案 1 :(得分:0)

我收到此错误,因为尚未将对servlet的依赖关系添加到我的pom.xml中 添加接下来的几行解决了我的问题

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>test</scope>
</dependency>