【问题标题】:Need advice on unit testing method which is using "dozer.map" method需要有关使用“dozer.map”方法的单元测试方法的建议
【发布时间】:2019-01-16 18:16:08
【问题描述】:

我有一个 empModel 和 empDto 对象。在 Spring Boot 应用程序中,我正在进行服务调用以按 Id 获取员工模型。该方法通过服务调用从数据库中获取empModel。 Dozermapper 填充 DTO 并返回 dto。 DozerMapper 被注入到控制器中。

在对方法进行单元测试时面临困难。 我可以使用 when/thenReturn 来模拟服务。但是,我无法将 dozerMapper 模拟为具有 void 返回的方法。对方法进行单元测试的正确方法是什么?

  @Inject
  public Controller(DozerBeanMapper dozerBeanMapper, EmployeeService service){
    this.dozerBeanMapper = dozerBeanMapper;
    this.service = service;
  }

  @GetMapping("/{id}")
  public EmpDto getEmployeeById(@PathVariable long id){
    EmpModel empModel = service.getEmployeeById(id);
    EmpDto empDto = new EmpDto();
    dozerBeanMapper.map(empModel,empDto);
    return empDto;
  }

【问题讨论】:

  • 有不同的方法来模拟 void 方法的行为。这是一个很好的参考:baeldung.com/mockito-void-methods
  • 展示你是如何编写测试类和模拟的
  • @MukulGoel。我检查了链接,似乎 doAnswer() 适合使用。通过使用它,我假设我可以模仿映射器方法的行为,以便测试通过并且不会获得 NPE。这是正确的理解吗?

标签: unit-testing spring-boot dozer


【解决方案1】:

如果您调用 map 方法并将 EmpDto 类作为第二个参数传递,Dozer 将创建 EmpDto。它返回 EmpDto 实例,很容易模拟

@GetMapping("/{id}")
public EmpDto getEmployeeById(@PathVariable long id){
    EmpModel empModel = service.getEmployeeById(id);
    return dozerBeanMapper.map(empModel,EmpDto.class);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 2010-11-28
    • 2010-10-21
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多