如何通过MockMvc为每个请求设置servlet路径

时间:2014-02-17 19:40:06

标签: spring spring-mvc spring-test

是否可以为通过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?

1 个答案:

答案 0 :(得分:3)

我遇到过ServletException(“循环视图路径......”)的问题,这种问题只发生在实际部署中,但从未在我们的MockMvc测试中发生过。

问题是没有使用@ResponseBody注释方法。测试工作正常,因为有一个空的servlet路径,因此它将viewName解析为'servletPath / callPath',这与'callPath'不同,所以它没有抛出ServletException。因此,我需要在测试请求上设置servletPath以更接近应用程序的部署方式,并在忘记注释的情况下使测试失败。

.defaultRequest(get("/").servletPath("/main")) 

对我来说就像一个魅力。所以问题的答案有效。