- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我写了这个方法:
@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 如何测试 redirectAttributes 包含 rd
和 fa
?
我用的是3.2.3.RELEASEspring框架版本
最佳答案
您可以使用 MockMvcResultMatchers#flash()
返回 FlashAttributeResultMatchers
具有 attribute()
的对象方法。
mockMvc.perform(MockMvcRequestBuilders.get("/someURL"))
.andExpect(MockMvcResultMatchers.model().attribute("rd", "rdValue"))
.andExpect(MockMvcResultMatchers.flash().attribute("fa", someValueThatEqualsFaValue));
请注意,"rd"
将是一个 Model
属性,而不是 flash 属性。
关于java - 如何测试该方法已添加 redirectAttributes ?(通过 MockMvc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19274105/
我有一个想要测试的 REST 端点。通过 POST 请求命中此端点会上传远程 git 存储库中的文件。我正在尝试使用mockMvc测试对此端点的POST调用(我只想查看返回状态“isOk()”)——我
当我使用 WebApplicationContext 创建 MockMvc 以使用 Spring MVC 3.2.3 进行 restful-webservice 测试时,如下所示: @Autowire
我尝试测试注入(inject) UserPrincipal 的 mvcControllers 的访问: restPockMockMvc .perform(get("/pocs").principal(
我有一个带有 MySQL 数据库的简单 REST 应用程序,一切正常,但是在测试时我们是否需要创建一个虚拟对象并对其进行测试,或者通过模拟数据库进行测试?虚拟对象有相当大的构造函数和嵌套类,这是一个很
我有一个使用 MockMvc 的 springBoot 2.1.9.RELEASE 应用程序。 我想知道是否有办法从文件中获取正文内容 mockMvc.perform(post("/hostel")
我想测试包含请求正文的请求类型 post 的其余 Controller 方法。所有其他获取方法在发布后都可以正常工作。我期待 200 OK 但它返回 417。我的目的是让它通过我运行测试但失败了。我是
我正在尝试添加 Cucumber到我已经在使用 spring-test 和 JUnit 的 Spring Web MVC 项目。我已经编写的非 Cucumber 集成测试 Autowiring 了 W
我想向 Controller 发送一个由文件和简单类型组成的复杂对象。 public class ContributionNew { private List elementsToAdd;
我正在为我的 Spring 数据休息存储库编写测试用例: @RepositoryRestResource(collectionResourceRel = "teams", path = "teams"
当我模拟传递有效id时,测试运行成功,但是当我传递无效id时,返回返回404,这是预期的,但没有响应,当我正常的Http请求时,它返回响应正文,消息未找到,状态404。我在这里做错了什么? @RunW
当我使用以下 Controller /测试配置收到“请求的映射错误”时,目前正在努力解决问题。 Controller : @Slf4j @Validated @RestController @Requ
在我的测试中,我设置了 MockMvc @Before 中的对象像这样 mockMvc = MockMvcBuilders.webAppContextSetup(context)
有人有任何提示,或者有人知道如何测试 HTTP 响应对象返回的“错误消息”吗? @Autowired private WebApplicationContext ctx; private MockMv
我正在为 Spring Rest 服务编写测试,它将 url 重定向到另一个 Spring 服务。所以目标是使用书签名称找到书签。第一个服务使用 Bookmark 名称获取 BookmarkId,然后
我需要测试一个调用异步服务的 Controller 。 Controller 代码 @RequestMapping(value = "/path", method = RequestMethod.PO
我刚刚使用 MockMvc 为 Controller 创建了一个简单的集成测试。一切正常,但即使 Controller 方法返回某些内容也没有任何响应。这是 Controller : import d
我编写了 Controller ,它为每个映射使用不同的值。现在我将其折射为所有映射使用相同的值,但是我不知道如何进行测试,因为它对每个映射都返回 404。 这是我的 Controller : @Cr
我想在 Spring Boot 中为我的 Controller 创建一些测试。具体来说,我想创建一个测试来处理表单以添加新项目。该项目属于 Drug 类,并且有一个集合作为 参数: @ManyToMa
使用 Spring boot 2 和 Spring mvc。我正在尝试使用 mockMvc 测试我的休息 Controller @PostMapping( value = "/
大多数时候,我们不是在普通的 JUnit 断言中添加注释,而是向断言添加一条消息,以解释为什么这是断言: Person p1 = new Person("Bob"); Person p2 = new
我是一名优秀的程序员,十分优秀!