如何使用 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
}
我想测试一个控制器,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
}