是否可以为通过MockMvc的所有请求(get,post,put,delete)设置servlet路径?
Spring dispatch servlet映射到/ rest / * 但在我的测试中,我必须删除url中的/ rest部分,否则Spring测试无法识别控制器。
修改
@Sotirios:
有可能像:
public class MyWebTests {
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = standaloneSetup(new AccountController())
.defaultRequest(get("/")
.contextPath("/app").servletPath("/main")
.accept(MediaType.APPLICATION_JSON).build();
} }
但我想知道如何为所有请求设置servlet路径。以上代码来自http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/testing.html。
或者是否只能使用standaloneSetup定义servletPath?
答案 0 :(得分:3)
我遇到过ServletException(“循环视图路径......”)的问题,这种问题只发生在实际部署中,但从未在我们的MockMvc测试中发生过。
问题是没有使用@ResponseBody注释方法。测试工作正常,因为有一个空的servlet路径,因此它将viewName解析为'servletPath / callPath',这与'callPath'不同,所以它没有抛出ServletException。因此,我需要在测试请求上设置servletPath以更接近应用程序的部署方式,并在忘记注释的情况下使测试失败。
.defaultRequest(get("/").servletPath("/main"))
对我来说就像一个魅力。所以问题的答案有效。