在我的Spring应用程序中,我在控制器中添加了一个标题:
@RequestMapping(value = "/people", method = RequestMethod.GET)
public ResponseEntity<List<Person>> systems(Pageable pageable) {
Page people = peopleService.getPeopleSystems(pageable);
HttpHeaders headers = new HttpHeaders();
headers.add("CustomHeader1", String.valueOf(people.getTotalElements()));
headers.add("CustomHeader2", String.valueOf(people.getSize()));
return new ResponseEntity<List<People>>(people.getContent(), headers, HttpStatus.OK);
}报头包含控制器内部获得的人员数量。代码按预期工作,但无法测试。
测试类大致可以如下所示:
@Test
public void test_header() throws Exception {
PeopleService pepleService = mock(PeopleService.class);
Pageable pageable = mock(Pageable.class);
Page<Person> page = mock(Page.class);
when(pepleService.getPeopleSystems(pageable)).thenReturn(page);
when(page.getTotalElements()).thenReturn((long) 2000);
when(page.getSize()).thenReturn(10);
mockMvc.perform(get("/people")
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(header().stringValues("CustomHeader1"));
}测试在线上失败
headers.add("CustomHeader1", String.valueOf(people.getTotalElements()));但NPE除外。
因此,我的问题是如何使我的控制器可测试,或者如何重构代码,以避免在我的方法中创建新的HttpHeaders()。任何帮助都会被接受。
发布于 2017-04-21 13:47:44
结果显示,我所需要的只是表明这个类是Pagable.class的实例。以下是工作测试:
Page<Person> page = new PageImpl<>(new ArrayList<>());
when(pepleService.getPeopleSystems(any(Pageable.class))).thenReturn(page);
mockMvc.perform(get("/people")
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(header().string("CustomHeader1", "2000"));发布于 2017-04-19 06:28:20
peopleService,然后模拟方法peopleService.getPeopleSystems(pageable)以返回Page的模拟。然后,您需要模拟方法people.getTotalElements()和people.getSize()来返回适当的值。HttpHeaders headers = mock(HttpHeaders.class)不应该工作,因为新对象是在方法中创建的。https://stackoverflow.com/questions/43487518
复制相似问题