春季mvc测试中的空内容

时间:2015-03-09 14:31:33

标签: spring spring-mvc-test

我无法使用spring mvc test测试页面内容,因为它是空的。

给出最简单的控制器:

@RequestMapping(value = "/home")
public String home(HttpSession session, ModelMap model) {
  return "home";
}

相关的瓷砖配置:

<definition name="base.definition" template="/jsp/view/application.jsp">
  <put-attribute name="header" value="/jsp/view/header.jsp" />
  <put-attribute name="menu" value="/jsp/view/menu.jsp" />
  <put-attribute name="title" value="" />
  <put-attribute name="body" value="" />
  <put-attribute name="footer" value="/jsp/view/footer.jsp" />
</definition>
<definition name="home" extends="base.definition">
  <put-attribute name="title" value="Welcome" />
  <put-attribute name="body" value="/jsp/view/home/list-home.jsp" />
</definition>

简单list-home.jsp

<p>Welcome</p>

测试:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration()
@ContextConfiguration(classes = WebTestConfig.class)
public class HomeControllerTest {
  @Autowired
  private WebApplicationContext wac;
  private MockMvc mockMvc;

  @Before
  public void _setup() {
    this.mockMvc =   MockMvcBuilders.webAppContextSetup(this.wac).build();
  }

  @Test
  public void home() throws Exception {
    mockMvc.perform(get("/home"))
        .andDo(print())
        .andExpect(status().isOk())
        .andExpect(forwardedUrl("/jsp/view/application.jsp"))
        .andExpect(content().string("Welcome"));
  }

它失败java.lang.AssertionError: Response content expected:<Welcome> but was:<>

打印出的回复如下:

MockHttpServletResponse:
              Status = 200
       Error message = null
             Headers = {}
        Content type = null
                Body = 
       Forwarded URL = /jsp/view/application.jsp
      Redirected URL = null
             Cookies = []

环境:

  • Spring 3.2
  • Tiles 2
  • Java 6

我错过了什么?

注意:代码在Tomcat中使用真正的浏览器。

1 个答案:

答案 0 :(得分:7)

您无法为JSP页面的内容编写断言,因为JSP页面由servlet容器呈现,而Spring MVC Test不运行servlet容器。您只能验证视图名称是否正确和/或请求是否转发到正确的URL。

但是,如果您使用的视图技术不需要servlet容器(例如Velocity或Thymeleaf),则可以为视图内容编写断言。