如何在使用Spring和Test-MVC时验证Web响应
-
11-12-2019 - |
题
关于如何使用Test-MVC进行单元测试的问题。
我有一个简单的控制器:
@Controller
@RequestMapping("/users")
public class UserController {
private UserService business;
@Autowired
public UserController(UserService bus)
{
business = bus;
}
@RequestMapping(value="{id}", method = RequestMethod.GET)
public @ResponseBody User getUserById(@PathVariable String id) throws ItemNotFoundException{
return business.GetUserById(id);
}
.
((我的想法是让控制器尽可能薄。)) 要测试这个控制器,我试图做这样的事情。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:mvc-dispatcher-servlet.xml"})
public class UserControllerTest extends ControllerTestBase {
UserService mockedService;
@Before
public void Setup()
{
MockitoAnnotations.initMocks( this );
mockedService = mock(UserService.class);
}
@Test
public void ReturnUserById() throws Exception{
User user = new User();
user.setName("Lasse");
stub(mockedService.GetUserById("lasse")).toReturn(user);
MockMvcBuilders.standaloneSetup(new UserController(mockedService)).build()
.perform(get("/users/lasse"))
.andExpect(status().isOk())
.andExpect(?????????????????????????????);
}
.
我的意图是检查是否返回了正确的JSON代码,,,,,,
我不是一个亲,,,,,,,,,,,,,,,,,,,,,,,,,,,)使用代码来验证返回的字符串,但我确信必须有优雅的方式来做这个
任何人都可以填写我吗?
// lg
解决方案
content().string(containsString("some part of the string"))
.
假设您拥有此导入:
import static org.springframework.test.web.server.result.MockMvcResultMatchers.*;
.
更新:添加JSONPATH还基于您的评论:
您可以添加依赖于 json-path ,似乎依赖于较旧版本的JSON-PATH:
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>0.5.5</version>
<scope>test</scope>
</dependency>
.
使用您的测试可以如下所示:
.andExpect(jsonPath("$.persons[0].first").value("firstName"));
. 不隶属于 StackOverflow