2014-09-19 25 views
5

Tôi đang cố gắng chạy thử nghiệm với JUnit và Mockito đối với dịch vụ web REST mùa xuân mà tôi đang xây dựng. Tôi đã gặp một lỗi khi cố chạy thử nghiệm JUnit và không thể tìm thấy bất kỳ thông tin nào về vấn đề này. Stacktrace được liệt kê các dòng lỗi như .andDo(print()) dù tôi có dòng đó trực tiếp từ một spring.io hướng dẫn http://spring.io/guides/tutorials/rest/3/java.lang.NoSuchMethodError: javaxservlet.http.HttpServletRequest.isAsyncStarted() Z

mã lớp thí nghiệm:

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

thể [Giải pháp] (http://stackoverflow.com/questions/23759690/java-lang-nosuchmethoderror-javax-servlet-http- httpservletrequest-isasyncstarte) – Grice

Trả lời

7

Bạn đang sử dụng một phiên bản cũ hơn của đặc tả Servlet (ví dụ, 2.5); trong khi đó, phiên bản spring-test mà bạn đang sử dụng yêu cầu ít nhất Servlet 3.0.

Như đã đề cập trong phần Testing Improvements của cuốn cẩm nang tham khảo,

As of Spring 4.0, the set of mocks in the org.springframework.mock.web package is now based on the Servlet 3.0 API.

Vì vậy, mặc dù Spring Framework 4.0 và 4.1 hỗ trợ Servlet 2.5 cho triển khai, mocks Servlet API và Spring MVC Kiểm tra khung trong mô-đun spring-test yêu cầu Servlet 3.0 (phiên bản cụ thể 3.0.1 hoặc cao hơn).

Kính trọng,

Sam (chính của các mô-đun spring-test)

+0

Tôi có một ứng dụng phải đối mặt với cùng một tình huống. Các container tôi cần để triển khai các ứng dụng để chỉ Servlet 2,5 có khả năng. Có cách nào để thử nghiệm mùa xuân để làm việc với 2.5 ít nhất là để thử nghiệm đơn vị? – user6123723

+0

Không, không thể sử dụng API Servlet Mock trong 'spring-test' với Servlet 2.5. Tuy nhiên, miễn là bạn không dựa vào bất kỳ tính năng nào của Servlet 3.x trong mã sản xuất của bạn (ví dụ: bộ điều khiển), không có vấn đề gì khi thử nghiệm với Servlet 3.x trong khi triển khai với Servlet 2.5. –

Các vấn đề liên quan