2015-03-09 10 views
6

Nie można przetestować zawartości strony za pomocą testu sprężyny mvc, ponieważ jest pusta.Pusta treść testu wiosennego testu mvc

Biorąc najprostszy sterownik:

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

odpowiednie płytki config:

<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> 

Proste list-home.jsp

<p>Welcome</p> 

a test:

@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")); 
    } 

I to się niepowodzeniem java.lang.AssertionError: Response content expected:<Welcome> but was:<>

wydrukowany na odpowiedź jest następująca:

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

środowiska:

  • Wiosna 3,2
  • Płytki 2
  • Java 6

Co przeoczyłem?

NB: Kod działa w Tomcat z prawdziwą przeglądarką.

+1

Nie można przetestować jsp (zawartości) za pomocą testu sprężyny mvc. Jest jeszcze trudniej, jeśli w grę wchodzą płytki. Nie znajduję linku do dokumentacji ani źródła, ale nie jest to możliwe. – meistermeier

+0

Dokumentacja: http://docs.spring.io/spring-framework/docs/3.2.0.BUILD-SNAPSHOT/reference/htmlsingle/#spring-mvc-test- framework z następującą linią 'W przeważającej części wszystko powinno działa tak jak w czasie wykonywania z wyjątkiem renderowania JSP, które nie jest dostępne poza kontenerem Serwletu. " – meistermeier

+0

Tak więc proces testowania przedstawiony w http://www.infoq.com/presentations/spring-mvc-test-htmlunit jest niedostępny przed wiosną 4.x. Czy mam rację? – takacsot

Odpowiedz

5

Nie można pisać asercji dla zawartości strony JSP, ponieważ strony JSP są renderowane przez kontener serwletu, a Spring MVC Test nie uruchamia kontenera serwletu. Możesz tylko sprawdzić, czy nazwa widoku jest poprawna i/lub żądanie jest przekazywane do poprawnego adresu URL.

Jednak można pisać asercje dla treści swoich widoków, jeśli używasz technologii widoku, która nie wymaga kontenera serwletu (takiego jak Velocity lub Thymeleaf).