如何使用MockMVC和standaloneSetup测试Thymeleaf而不测试WebApplicationContext?

时间:2018-06-16 10:33:35

标签: spring-boot kotlin thymeleaf mockmvc

我想测试一个控制器,它使用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 个答案:

答案 0 :(得分:0)

您应该添加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
}