21

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

但我不知道如何使用 AssertJ。我在网上看到的所有示例都使用带有 Spring MVC 测试的 Hamcrest。

下面是使用 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"))
                        )
                )));
4

3 回答 3

16

更新

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


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

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

问候,

Sam (Spring TestContext 框架的作者

于 2015-12-25T12:39:36.133 回答
3

我已经整理了一个库,它提供 AssertJ 断言,MockMvc但也为ResponseEntity(返回TestRestTemplate):https://github.com/ngeor/yak4j-spring-test-utils

于 2019-01-28T20:39:08.407 回答
1

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

看起来Phil Webb 创建的初始概念涉及包装 MockMvc 以提供对 AssertJ 断言的支持。

于 2016-04-20T21:48:38.513 回答