弹簧控制器在控制器测试中找不到模板

时间:2014-10-05 20:38:53

标签: java spring spring-mvc spring-boot spring-test

我正在使用spring-boot-starter-web,spring-boot-starter-test和spring-boot-starter-groovy-templates(1.2.0.M1)。

我正在尝试使用spring boot构建一个小应用程序。我用mockito为mvc控制器编写了测试。如果我用maven运行这些测试,我会为每个控制器测试得到以下错误:

Servlet Could not resolve view with name 'persons/list'

我不确定我是否配错了。

测试用例中的错误消失了:

  • 如果我将版本更改为spring-boot-starter-parent
  • 的1.1.7.RELEASE
  • 如果我使用组件扫描并将服务bean初始化为完整的bean

我已经设置了一个示例项目,在我的应用程序中出现相同的错误: https://github.com/waldemar-schneider/spring-boot-mvc-test

我错过了什么?提前谢谢

2 个答案:

答案 0 :(得分:1)

您尚未在PersonControllerTest使用的配置中启用自动配置,这意味着Spring Boot的Groovy模板支持的自动配置不会发生。要解决此问题,请将@EnableAutoConfiguration添加到ControllerTestConfig

它也没有真正与1.1.7.RELEASE一起使用,但是它以一种不同的方式失败,而你的测试没有识别出来。

如果您更新测试也要拨打MockMvcResultHandlers.print()

mockMvc.perform(get("/persons/"));
    .andDo(print())
    .andExpect(status().isOk())
    .andExpect(view().name("persons/list"))
    .andExpect(model().attribute("persons", hasSize(1)));

您会在输出中看到响应的空体:

…
MockHttpServletResponse:
          Status = 200
   Error message = null
         Headers = {Content-Type=[text/html;charset=UTF-8]}
    Content type = text/html;charset=UTF-8
            Body = 
   Forwarded URL = null
  Redirected URL = null
         Cookies = []

如果您按上述方式添加@EnableAutoConfiguration,则响应将包含预期的HTML:

…
MockHttpServletResponse:
          Status = 200
   Error message = null
         Headers = {Content-Type=[text/html;charset=UTF-8]}
    Content type = text/html;charset=UTF-8
            Body = <!DOCTYPE html><html class='no-js' lang='en'><head></head><body><h2>Person list</h2><table><thead><tr><th>Name</th><th>Surname</th></tr></thead><tr><td/><td/></tr></table></body></html>
   Forwarded URL = null
  Redirected URL = null
         Cookies = []

答案 1 :(得分:0)

  1. 您的application.properties为空
  2. 代表'persons/list'的是什么?一个 jsp 文件? tiles 视图名称?您需要配置application.properties
  3. 考虑这样的事情
  4. application.properties