首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对在控制器内创建的报头进行单元测试

对在控制器内创建的报头进行单元测试
EN

Stack Overflow用户
提问于 2017-04-19 05:56:01
回答 2查看 4.6K关注 0票数 2

在我的Spring应用程序中,我在控制器中添加了一个标题:

代码语言:javascript
复制
@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);
}

报头包含控制器内部获得的人员数量。代码按预期工作,但无法测试。

测试类大致可以如下所示:

代码语言:javascript
复制
       @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"));
}

测试在线上失败

代码语言:javascript
复制
headers.add("CustomHeader1", String.valueOf(people.getTotalElements()));

但NPE除外。

因此,我的问题是如何使我的控制器可测试,或者如何重构代码,以避免在我的方法中创建新的HttpHeaders()。任何帮助都会被接受。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-21 13:47:44

结果显示,我所需要的只是表明这个类是Pagable.class的实例。以下是工作测试:

代码语言:javascript
复制
   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"));
票数 3
EN

Stack Overflow用户

发布于 2017-04-19 06:28:20

  1. 您需要模拟peopleService,然后模拟方法peopleService.getPeopleSystems(pageable)以返回Page的模拟。然后,您需要模拟方法people.getTotalElements()people.getSize()来返回适当的值。
  2. HttpHeaders headers = mock(HttpHeaders.class)不应该工作,因为新对象是在方法中创建的。
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43487518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档