在我的 JUnit 测试中,如何验证 Spring RedirectView?
In my JUnit test, how do I verify a Spring RedirectView?
我正在使用 Spring 3.2.11.RELEASE 和 JUnit 4.11。在一个特定的 Spring 控制器中,我有一个这样结束的方法...
return new ModelAndView(new RedirectView(redirectUri, true));
在我的 JUnit 测试中,如何验证 return 从提交到我的控制器,其中此 RedirectView 是 returned?我曾经使用 org.springframework.test.web.AbstractModelAndViewTests.assertViewName,但只有 returns "null",即使非空的 ModelAndView 对象被 returned。以下是我构建 JUnit 测试的方式 ...
request.setRequestURI(“/mypage/launch");
request.setMethod("POST");
…
final Object handler = handlerMapping.getHandler(request).getHandler();
final ModelAndView mav = handlerAdapter.handle(request, response, handler);
assertViewName(mav, "redirect:/landing");
感谢任何有关如何验证 RedirectView 返回正确值的帮助,
考虑将您的工具更改为 MockMvc。
首先你应该根据你的控制器创建你的 MockMvc。
private MockMvc mockController;
mockController =
MockMvcBuilders.standaloneSetup(loginController).setCustomArgumentResolvers(
new ServletWebArgumentResolverAdapter(new PageableArgumentResolver())).build();
创建该对象后,使用请求信息构建请求。其中一部分是 API.
中包含的断言选项
mockController.perform(MockMvcRequestBuilders.get(LoginControllerTest.LOGIN_CONTROLLER_URL + "?logout=true").
principal(SessionProvider.getPrincipal("GonLu004")))
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.view().name("jsp/login"))
.andExpect(MockMvcResultMatchers.model().attribute("logOutMessage", logoutMessage));
MockMvcResultMatchers contains a method for reviewing redirect information.
MockMvc 来自 spring 是在控制器层上应用单元测试的不错选择。
正如 Koiter 所说,考虑转向 spring-test a 和 MockMvc
它以声明的方式提供了一些测试控制器和requests/reponses的方法
你需要 @Autowired WebApplicationContext wac;
并在您的 @Before
方法上将其设置为使用 class 的 @WebAppConfiguration
。
你最终会得到一些东西
@ContextConfiguration("youconfighere.xml")
//or (classes = {YourClassConfig.class}
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class MyControllerTests {
@Autowired WebApplicationContext wac
private MockMvc mockMvc;
@Before
public void setup() {
//setup the mock to use the web context
this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
}
那么你只需要使用 MockMvcResultMatchers 断言
@Test
public void testMyRedirect() throws Exception {
mockMvc.perform(post("you/url/")
.andExpect(status().isOk())
.andExpect(redirectUrl("you/redirect")
}
注意:post(), status() isOk() redirectUrl()
是从 MockMvcResultMatchers
导入的静态数据
查看更多您可以匹配的内容 here
我正在使用 Spring 3.2.11.RELEASE 和 JUnit 4.11。在一个特定的 Spring 控制器中,我有一个这样结束的方法...
return new ModelAndView(new RedirectView(redirectUri, true));
在我的 JUnit 测试中,如何验证 return 从提交到我的控制器,其中此 RedirectView 是 returned?我曾经使用 org.springframework.test.web.AbstractModelAndViewTests.assertViewName,但只有 returns "null",即使非空的 ModelAndView 对象被 returned。以下是我构建 JUnit 测试的方式 ...
request.setRequestURI(“/mypage/launch");
request.setMethod("POST");
…
final Object handler = handlerMapping.getHandler(request).getHandler();
final ModelAndView mav = handlerAdapter.handle(request, response, handler);
assertViewName(mav, "redirect:/landing");
感谢任何有关如何验证 RedirectView 返回正确值的帮助,
考虑将您的工具更改为 MockMvc。
首先你应该根据你的控制器创建你的 MockMvc。
private MockMvc mockController;
mockController =
MockMvcBuilders.standaloneSetup(loginController).setCustomArgumentResolvers(
new ServletWebArgumentResolverAdapter(new PageableArgumentResolver())).build();
创建该对象后,使用请求信息构建请求。其中一部分是 API.
中包含的断言选项mockController.perform(MockMvcRequestBuilders.get(LoginControllerTest.LOGIN_CONTROLLER_URL + "?logout=true").
principal(SessionProvider.getPrincipal("GonLu004")))
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.view().name("jsp/login"))
.andExpect(MockMvcResultMatchers.model().attribute("logOutMessage", logoutMessage));
MockMvcResultMatchers contains a method for reviewing redirect information.
MockMvc 来自 spring 是在控制器层上应用单元测试的不错选择。
正如 Koiter 所说,考虑转向 spring-test a 和 MockMvc
它以声明的方式提供了一些测试控制器和requests/reponses的方法
你需要 @Autowired WebApplicationContext wac;
并在您的 @Before
方法上将其设置为使用 class 的 @WebAppConfiguration
。
你最终会得到一些东西
@ContextConfiguration("youconfighere.xml")
//or (classes = {YourClassConfig.class}
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class MyControllerTests {
@Autowired WebApplicationContext wac
private MockMvc mockMvc;
@Before
public void setup() {
//setup the mock to use the web context
this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
}
那么你只需要使用 MockMvcResultMatchers 断言
@Test
public void testMyRedirect() throws Exception {
mockMvc.perform(post("you/url/")
.andExpect(status().isOk())
.andExpect(redirectUrl("you/redirect")
}
注意:post(), status() isOk() redirectUrl()
是从 MockMvcResultMatchers
查看更多您可以匹配的内容 here