2014-09-19 12 views
5

JUnit ve Mockito ile yaptığım bir bahar REST web hizmetine karşı bir test çalıştırmaya çalışıyorum. JUnit testini çalıştırmaya çalışırken bir hatayla karşılaştım ve problem hakkında herhangi bir bilgi bulamadım. You kullanıyorsunuzjava.lang.NoSuchMethodError: javaxservlet.http.HttpServletRequest.isAsyncStarted() Z

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

Olası [çözeltisi] (http://stackoverflow.com/questions/23759690/java-lang-nosuchmethoderror-javax-servlet-http- httpservletrequest-isasyncstarte) – Grice

cevap

7

:

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: Bir spring.io öğretici http://spring.io/guides/tutorials/rest/3/

Testi sınıfı kodu doğrudan o satırı var .andDo(print()) sanki StackTrace hatası satır listeleme Servlet spesifikasyonunun eski bir sürümü (ör., 2.5); kullanırken, kullandığınız spring-test sürümü en az Servlet 3.0 gerektirir.

referans kılavuzun Testing Improvements bölümünde belirtildiği gibi

,

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.

Yani, Bahar Framework rağmen 4.0 ve 4.1 desteği dağıtım, Servlet API mocks ve Bahar MVC Testi Framework için Servlet 2.5 spring-test modülünde, Servlet 3.0 (özellikle sürüm 3.0.1 veya üstü) gerekir.

Selamlar,

Sam (spring-test modülünün kurşun)

+0

Aynı senaryo karşısında bir uygulamanız var. Uygulamayı kullanmam gereken kapsayıcı yalnızca Servlet 2.5 özellikli. İlk önce en az 2.5 test ile çalışmak için ilkbahar testini yapmanın bir yolu var mı? – user6123723

+0

Hayır, Servlet 2.5 ile "Spring-test "indeki Mock Servlet API'sini kullanmak mümkün değildir. Ancak, üretim kodunuzda (ör. Denetleyiciler) herhangi bir Servlet 3.x özelliklerine güvenmediğiniz sürece, Servlet 2.5'e karşı dağıtırken Servlet 3.x'e karşı sınamada sorun yoktur. –