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

Mar*_*ijk 5 spring spring-mvc spring-test

是否可以为通过MockMvc的所有请求(获取,发布,放置,删除)设置servlet路径?

Spring派发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();
Run Code Online (Sandbox Code Playgroud)

}}

但是我不知道如何为所有请求设置servlet路径。上面的代码来自http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/testing.html

还是只能使用standaloneSetup定义servletPath?

Ond*_*ert 5

我遇到了 ServletException("Circular view path ...") 的问题,该问题仅在实际部署中发生,但在我们使用 MockMvc 的测试中从未发生过。

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

.defaultRequest(get("/").servletPath("/main")) 
Run Code Online (Sandbox Code Playgroud)

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