我想测试弹簧控制器的已解析视图名称

时间:2015-06-23 20:03:26

标签: spring-test spring-mvc-test

Simplist case我的控制器返回 新的ModelAndView("你好")。 "你好"映射/解析为(在xml文件中)到jsp, 例如"你好"可以映射到WEB-INF / myapp / goodbye.jsp。 我想为我的控制器编写一个测试,以验证返回的视图名称是否能正确解析。如果某个地方,无论是在控制器中还是(我正在使用tile来映射)spring config,它定义了视图名称尚未被指定的映射。

    <bean id="tilesConfigurer"
        class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>/springmvc/tiles-myapp.xml</value>
            </list>
        </property>
    </bean>

<definition name="hello" extends="main">
    <put-attribute name="title" value="Simple App"/>
    <put-attribute name="body" value="/WEB-INF/myapp/goodbye.jsp"/>
  </definition>

1 个答案:

答案 0 :(得分:1)

您可以使用Spring MVC Test Framework来验证已解析视图的目标JSP。

以下是参考手册的相关摘录:

  

Spring MVC Test建立在熟悉的“模拟”实现的基础之上   spring-test模块中提供的Servlet API。这允许   在不需要的情况下执行请求和生成响应   在Servlet容器中运行。一切都应该是   除了JSP渲染之外,它在运行时工作   在Servlet容器外部不可用。而且,如果你是   熟悉MockHttpServletResponse如何运作,你会知道的   转发和重定向实际上并未执行。而是“转发”   并且“重定向”的URL被保存并且可以在测试中断言。这个   意味着如果您正在使用JSP,则可以验证JSP页面   请求已转发。

Spring自己的测试套件中的JavaConfigTests使用JSP和Tiles演示了这样的测试:

@Test
public void tilesDefinitions() throws Exception {
    this.mockMvc.perform(get("/"))
        .andExpect(status().isOk())
        .andExpect(forwardedUrl("/WEB-INF/layouts/standardLayout.jsp"));
}

此致

萨姆