2013-10-09 8 views
7

मैं इस विधि लिखा है redirectAttributes जोड़ा गया है:कैसे है कि विधि का परीक्षण करने के (MockMvc द्वारा)

@RequestMapping(value="/someURL", method=GET) 
public String myMethod(RedirectAttributes redirectAttributes) 
{ 
    redirectAttributes.addAttribute("rd", "rdValue"); 
    redirectAttributes.addFlashAttribute("fa", faValue); 
    return "redirect:/someOtherURL"; 
} 

टेस्ट कोड:

@Test 
    public void myMethod() throws Exception{ 

    MockHttpServletRequestBuilder request = MockMvcRequestBuilders 
       .get("/someURL"); 
    ResultActions result = mockMvc.perform(request); 
} 

अगर मैं परीक्षा निष्पादन आह्वान मैं देख रहा हूँ:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public java.lang.String com.epam.hhsystem.web.controllers.VacancyMenuController.myMethod(org.springframework.web.servlet.mvc.support.RedirectAttributes)]; nested exception is java.lang.IllegalStateException: Argument [RedirectAttributes] is of type Model or Map but is not assignable from the actual model. You may need to switch newer MVC infrastructure classes to use this argument. 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) 
    at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:66) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:168) 
    at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:136) 
    at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:134) 
    at com.epam.hhsystem.web.controllers.VacancyMenuControllerTest.myMethod(VacancyMenuControllerTest.java:179) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public java.lang.String com.epam.hhsystem.web.controllers.VacancyMenuController.myMethod(org.springframework.web.servlet.mvc.support.RedirectAttributes)]; nested exception is java.lang.IllegalStateException: Argument [RedirectAttributes] is of type Model or Map but is not assignable from the actual model. You may need to switch newer MVC infrastructure classes to use this argument. 
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:181) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) 
    ... 38 more 
Caused by: java.lang.IllegalStateException: Argument [RedirectAttributes] is of type Model or Map but is not assignable from the actual model. You may need to switch newer MVC infrastructure classes to use this argument. 
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:322) 
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171) 
    ... 43 more 

मैं RedirectAttributes के साथ समस्या को समझता हूं, लेकिन मुझे समझ में नहीं आता कि इसे कैसे हल किया जाए।

MockMvc द्वारा उस रीडायरेक्ट का परीक्षण कैसे करें गुणों में rd और fa शामिल हैं?

मैं 3.2.3.RELEASE वसंत ढांचा संस्करण का उपयोग

उत्तर

4

आप MockMvcResultMatchers#flash() जो एक FlashAttributeResultMatchers वस्तु जो एक attribute() विधि है रिटर्न उपयोग कर सकते हैं।

mockMvc.perform(MockMvcRequestBuilders.get("/someURL")) 
      .andExpect(MockMvcResultMatchers.model().attribute("rd", "rdValue")) 
      .andExpect(MockMvcResultMatchers.flash().attribute("fa", someValueThatEqualsFaValue)); 

ध्यान दें कि "rd" एक Model विशेषता, नहीं एक फ्लैश विशेषता प्राप्त होगी।

+0

@ user2740224 आप किस वसंत का उपयोग कर रहे हैं? 'RedirectAttributes' को 3.1 में जोड़ा गया था। साथ ही, आपको अपने प्रश्नों को त्रुटियों के साथ संपादित करना चाहिए, वे टिप्पणियों में अच्छी तरह से प्रारूपित नहीं होते हैं। –

+0

विषय बढ़ गया है। मैं 3.2.3.RELEASE वसंत फ्रेमवर्क संस्करण का उपयोग करता हूं –

संबंधित मुद्दे