有没有办法在Spring MVC Test中使用AssertJ断言?

时间:2015-12-24 04:55:09

标签: spring-mvc spring-test hamcrest assertj

我在项目中使用AssertJ一段时间了。最近我开始使用Spring MVC Test来测试Spring MVC控制器。

但我没有得到如何使用AssertJ。我在网上看到的所有例子都使用Hamcrest和Spring MVC Test。

以下是使用Hamcrest API的示例。

mockMvc
                .perform(get("/user?operation=userList"))
                .andExpect(status().isOk())
                .andExpect(model().attribute(UserController.MODEL_ATTRIBUTE_USER_LIST, userList))
                .andExpect(view().name(UserController.VIEW_USER_LIST))
                .andExpect(model().attribute(UserController.MODEL_ATTRIBUTE_USER_LIST, hasSize(2)))
                .andExpect(model().attribute(UserController.MODEL_ATTRIBUTE_USER_LIST, hasItem(
                        allOf(
                                hasProperty("id", is(1L)),
                                hasProperty("description", is("Lorem ipsum")),
                                hasProperty("title", is("Foo"))
                        )
                )))
                .andExpect(model().attribute(UserController.MODEL_ATTRIBUTE_USER_LIST, hasItem(
                        allOf(
                                hasProperty("id", is(2L)),
                                hasProperty("description", is("Lorem ipsum")),
                                hasProperty("title", is("Bar"))
                        )
                )));

3 个答案:

答案 0 :(得分:13)

<强>更新

如果您想投票支持使用MockMvc对AssertJ断言进行支持,请参阅相关的Spring JIRA问题:SPR-16637

一般来说,在使用Spring进行测试时,您可以选择自己喜欢的任何断言框架。

但是,您描述的特定场景涉及Spring MVC Test框架的API。有问题的方法旨在与Hamcrest Matcher API一起使用。因此,不可能在这些方法调用中使用AssertJ。

此致

Sam (Spring TestContext Framework的作者

答案 1 :(得分:2)

我整理了一个库,该库为MockMvcResponseEntity(由TestRestTemplate返回)提供AssertJ断言:https://github.com/ngeor/yak4j-spring-test-utils

答案 2 :(得分:1)

最近在Spring Boot项目上提出了一个问题,讨论在MockMvc中添加对AssertJ断言的支持,可能值得关注它。您可以在此处查看问题:https://github.com/spring-projects/spring-boot/issues/5729

看起来initial concept created by Phil Webb涉及包装MockMvc以提供对AssertJ断言的支持。