【问题标题】:How to mock class which uses Map Struct in Java?如何在 Java 中模拟使用 Map Struct 的类?
【发布时间】:2017-11-18 08:34:07
【问题描述】:

使用 MAPSTRUCT 的 Java 类我们在接口内部有静态变量 INSTANCE,并且该接口实现是在运行时创建的。那么,如何在 Java 中模拟使用 Map Struct 的类?

    @Mapper 1
    public interface CarMapper {

        CarMapper INSTANCE = Mappers.getMapper( CarMapper.class ); 3

        @Mapping(source = "numberOfSeats", target = "seatCount")
        CarDto carToCarDto(Car car); 2
    }


    public class A
    {
        public CarDto getCardto()
        {
            CarDto carDto = CarMapper.INSTANCE.carToCarDto(car);
            return carDto;
        }

    }

如何为 A 类创建模拟?

【问题讨论】:

  • 请提供一些代码来查看,您的描述还远远不够。 “MAPSTRUCT”也不是我所知道的;包含一些代码的另一个原因。
  • 如果您使用的是静态变量INSTANCE,这意味着您使用的是默认的componentModel。为什么需要模拟这样的课程?你不必在界面中使用静态变量,你也可以在另一个地方(你需要它的地方)创建它。
  • 你能看一下代码吗?
  • 首先 MapStruct 是一个注解处理器,因此它在编译时而不是运行时创建实现类。查看代码我的答案仍然有效

标签: java mockito powermock mapstruct


【解决方案1】:

如果你想模拟类A,那么你可以做Mockito.mock(A.class)

【讨论】:

  • 我知道,当模拟 CarMapper.INSTANCE 时,它会抛出 ClassNotFoundException,因为我们没有在运行时生成任何 CarMapperImpl。
  • 为什么需要模拟 CarMapper.INSTANCE?模拟 A 类意味着完全覆盖 getCardto(),因此无需担心 INSTANCE 对象。
  • 再次CarMapperImpl 是在编译时生成的,而不是在运行时生成的。雷的评论是有效的。 INSTANCE 对象如何干扰A 的模拟?
猜你喜欢
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
  • 2020-03-30
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
相关资源
最近更新 更多