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

How to test Thymeleaf with MockMVC and standaloneSetup and no WebApplicationContext?

我想测试一个控制器,returns 页面使用 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)))
    }
}

但我遇到了异常:

Circular view path [post]: would dispatch back to the current handler URL [/post] again.

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

我不想使用 WebApplicationContext 或类似的东西。

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