2014-09-19 35 views
5

Sto provando a eseguire un test con JUnit e Mockito contro un webservice REST di primavera che sto costruendo. Ho trovato un errore durante il tentativo di eseguire il test JUnit e non riesco a trovare alcuna informazione sul problema. Lo StackTrace sta elencando la linea di errore come il .andDo(print()) se ho ottenuto che la linea direttamente da un tutorial spring.io http://spring.io/guides/tutorials/rest/3/java.lang.NoSuchMethodError: javaxservlet.http.HttpServletRequest.isAsyncStarted() Z

codice della classe di prova:

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

Possibile [Soluzione] (http://stackoverflow.com/questions/23759690/java-lang-nosuchmethoderror-javax-servlet-http- httpservletrequest-isasyncstarte) – Grice

risposta

7

si utilizza una versione precedente delle specifiche Servlet (ad es. 2.5); mentre la versione di spring-test che si sta utilizzando richiede almeno Servlet 3.0.

Come menzionato nella sezione Testing Improvements del manuale di riferimento,

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.

Così, anche se Spring Framework 4.0 e 4.1 il supporto Servlet 2.5 per distribuzione, le deride Servlet API e la Spring MVC test quadro nel modulo spring-test richiede Servlet 3.0 (in particolare versione 3.0.1 o successiva).

saluti,

Sam (piombo del modulo spring-test)

+0

Ho un'app rivolta allo stesso scenario. Il contenitore di cui ho bisogno per distribuire l'app è in grado solo di Servlet 2.5. C'è un modo per fare in modo che il test delle molle funzioni con 2.5 almeno per i test delle unità? – user6123723

+0

No, non è possibile utilizzare l'API Mock Servlet in 'spring-test' con Servlet 2.5. Tuttavia, se non si fa affidamento su alcuna funzionalità di Servlet 3.x nel codice di produzione (ad es. Controller), non c'è alcun problema con il test contro Servlet 3.x durante la distribuzione contro Servlet 2.5. –

Problemi correlati