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

问题描述 投票:6回答:2

是否可以为通过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();

}}

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

或者是否只能使用standaloneSetup定义ServletPath?

spring spring-mvc spring-test
2个回答
3
投票

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

问题是方法未使用@ResponseBody进行注释。该测试运行良好,因为servlet路径为空,因此将viewName解析为与“ callPath”不同的“ servletPath / callPath”,因此未引发ServletException。因此,我需要在测试请求上设置ServletPath,以更接近应用程序的部署方式,并在万一忘记注释的情况下使我们的测试失败。

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

像魅力一样为我工作。因此问题中的答案有效。


0
投票

确定,

但是如果必须在服务器端取回与您调用的不同Web服务相对应的不同servletPath来处理它,怎么办?

您是否将其应用于对mokMvc.perform方法的每次调用?谢谢

© www.soinside.com 2019 - 2024. All rights reserved.