【问题标题】:How to test Service method with ModelMapper call如何使用 ModelMapper 调用测试 Service 方法
【发布时间】:2021-09-10 12:31:10
【问题描述】:

我正在为我的服务类编写一些单元测试,具体来说,就是一个更新方法,它使用请求中的给定数据更新实体。

问题是,我正在使用 ModelMapper 将请求数据映射到实体,当测试通过映射语句时,它实际上并没有调用 modelMapper 而是模拟 .... 它什么也不做,因为它是模拟。

我应该如何模拟它的行为?

public EntityNode updateEntity(String code, EntityDTO request) {
    String message = "Entity with code: %s not found";

    EntityNode entity = repository.findByCode(code)
            .orElseThrow(() -> new EntityNotFoundException(String.format(message, code)));

    modelMapper.map(request, entity);

    return repository.save(entity);
}

我曾考虑过使用 ArgumentCaptor,但我不确定它是否适合我的需求,或者它是否真的是我需要做的事情。

这是我未完成的测试方法。写完所有这些后,我认为我应该以某种方式存根 ModelMappers.map(),并在调用 repository.save(entity) 时返回调用 ModelMapper 存根 map() 方法的结果。

@Test
void givenValidEntity_whenUpdateEntity_shouldUpdateProperties() {
    //given
    String code = "TEST";
    Entity expected = new Entity();
    expected.setName("Old");

    EntityDTO request = new EntityDTO();
    request.setName("New")

    given(repository.findByCode(code)).willReturn(expected);

    //when
    Entity updatedEntity = service.updateEntity(code, request);

    //then
    assertEquals(request.getName(), updatedEntity.getName());
}

这有意义吗?

谢谢

【问题讨论】:

    标签: java spring spring-boot unit-testing testing


    【解决方案1】:

    有什么变化?

    通过查看当前代码,modelMapper 似乎进行了更改。这意味着更改单元测试应该在modelMapper自己的单元测试中。

    EntityNode updateEntity(String code, EntityDTO request) 有什么作用?

    它从存储库中获取一个实体,获取您的实体,通过modelMapper 传递它并通过存储库保存结果。因此,在测试此函数时,您应该只测试这些事情是否使用正确的参数发生,而不是 modelMapper 本身所做的事情。

    如果你想测试你的函数 + modelMapper 那么这更像是一个集成测试而不是一个单元测试。

    补充说明

    理想情况下,modelMapper 不会改变任何东西。相反,它将采用两个参数并将结果作为新对象返回。这样它会更容易测试和模拟(你可以避免在测试updateEntity函数时使用参数验证)。

    【讨论】:

      【解决方案2】:

      您可以将映射提取到另一个返回映射实体的类,这样您就可以模拟该返回值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-05
        • 2019-03-30
        • 1970-01-01
        • 2010-11-14
        • 2019-09-12
        • 1970-01-01
        • 2010-12-18
        • 1970-01-01
        相关资源
        最近更新 更多