2
建立在我的春节,启动应用程序的标题单元测试,我增加了我的头控制器内:对内部控制
@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);
}
头包含这是内部控制得到了人们的数量。代码按预期工作,但不可测试。
测试类大致可能是这样的:在与NPE例外线
headers.add("CustomHeader1", String.valueOf(people.getTotalElements()));
@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"));
}
测试失败。
所以我的问题是如何使我的控制器可测试,或如何重构代码以摆脱在我的方法内创建新的HttpHeaders()。 任何帮助将被折衷。
是否可以注入'HTTPHeader'作为Spring Bean而不是每次都创建一个新的对象?这样,你可以轻松地嘲笑它。 – user2004685
看起来你的'@ Test'方法有一些错误:你正在嘲笑'when(people.getContent())'方法,但'people'是一个'List'。 'String.valueOf(people.getTotalElements())'也是一样。这段代码甚至不应该编译 –
没有找到你在哪里设置'''peopleService'''模拟到被测试的控制器中,并提供'''peopleService.getPeopleSystems'调用的结果。 NPE在这里最有可能发生,因为'''getPeopleSystems'''返回null和''people(null).getTotalElements()'''' –