代码之家  ›  专栏  ›  技术社区  ›  Daria Pydorenko

如何使用mockmvc和standalonesetup在没有webapplicationcontext的情况下测试thymeleaf?

  •  0
  • Daria Pydorenko  · 技术社区  · 6 年前

    我想测试一个控制器,它使用thymeleaf模板返回页面 MockMVC .

    这是我的测试:

    class PostControllerTest {
    
        ...
    
        @BeforeClass
        fun setUp() {
            MockKAnnotations.init(this)
    
            mockMvc = MockMvcBuilders.standaloneSetup(postController)
                    .build()
        }
    
        @Test
        fun testGetFirstPost() {
            every { postRepository.find(1) } returns post
    
            mockMvc.perform(get("/post/1"))
                    .andExpect(status().`is`(200))
                    .andExpect(model().attribute("post", equalTo(post)))
        }
    }
    

    但我有个例外:

    循环视图路径[post]:将分派回当前处理程序 再次发送url[/post]。

    控制器映射和模板的名称相同( post )

    我不想用 WebApplicationContext 或者像这样的。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Daria Pydorenko    6 年前

    你应该加上 ViewResolver 要识别模板:

    mockMvc = MockMvcBuilders.standaloneSetup(postController)
                .setViewResolvers(viewResolver())
                .build()
    

    在哪里? viewResolver() 是:

    private fun viewResolver(): InternalResourceViewResolver {
        val viewResolver = InternalResourceViewResolver()
    
        // configuration
        viewResolver.setPrefix("/templates/")
        viewResolver.setSuffix(".html")
    
        return viewResolver
    }