如何测试控制器方法是否将请求转发到特定的 URL?
How to test if a controller method forwards the requests to a specific URL?
在我的 Spring 引导应用程序中,我有以下控制器,它使用一个方法将所有 HTML5 路由重定向到根目录 URL**:
@Controller
public class RedirectController {
@RequestMapping(value = "/**/{path:[^\.]*}")
public String redirect() {
return "forward:/";
}
}
我应该如何正确测试它是否按预期工作?
调用 MockMvcResultMatchers
class 的 content()
方法无效:
@Test
public void givenPathWithoutDotShouldReturnString() throws Exception {
this.mockMvc.perform(get("/somePath"))
.andExpect(content().string("forward:/"));
}
>>> java.lang.AssertionError: Response content
>>> Expected :forward:/
>>> Actual :
** 我通过关注 this Spring tutorial.
找到了这个解决方案
当我调用 mockMvc
class 的 andDo(print())
时,我得到以下结果:
MockHttpServletResponse:
Status = 200
Error message = null
Headers = {}
Content type = null
Body =
Forwarded URL = /
Redirected URL = null
Cookies = []
这里我意识到Spring并不是把return "forward:/";
当做一个简单的String结果,而是一个URL转发(某种程度上很明显),所以正确的做法编写测试是通过使用 forwardedUrl("/")
作为参数调用 .andExpect()
方法:
@Test
public void givenPathWithoutDotShouldReturnString() throws Exception {
this.mockMvc.perform(get("/somePath"))
.andExpect(forwardedUrl("/"));
}
forwardedUrl()
方法来自org.springframework.test.web.servlet.result.MockMvcResultMatchers
.
在我的 Spring 引导应用程序中,我有以下控制器,它使用一个方法将所有 HTML5 路由重定向到根目录 URL**:
@Controller
public class RedirectController {
@RequestMapping(value = "/**/{path:[^\.]*}")
public String redirect() {
return "forward:/";
}
}
我应该如何正确测试它是否按预期工作?
调用 MockMvcResultMatchers
class 的 content()
方法无效:
@Test
public void givenPathWithoutDotShouldReturnString() throws Exception {
this.mockMvc.perform(get("/somePath"))
.andExpect(content().string("forward:/"));
}
>>> java.lang.AssertionError: Response content
>>> Expected :forward:/
>>> Actual :
** 我通过关注 this Spring tutorial.
找到了这个解决方案当我调用 mockMvc
class 的 andDo(print())
时,我得到以下结果:
MockHttpServletResponse:
Status = 200
Error message = null
Headers = {}
Content type = null
Body =
Forwarded URL = /
Redirected URL = null
Cookies = []
这里我意识到Spring并不是把return "forward:/";
当做一个简单的String结果,而是一个URL转发(某种程度上很明显),所以正确的做法编写测试是通过使用 forwardedUrl("/")
作为参数调用 .andExpect()
方法:
@Test
public void givenPathWithoutDotShouldReturnString() throws Exception {
this.mockMvc.perform(get("/somePath"))
.andExpect(forwardedUrl("/"));
}
forwardedUrl()
方法来自org.springframework.test.web.servlet.result.MockMvcResultMatchers
.