当前位置: 首页 > 知识库问答 >
问题:

有没有办法用嵌套映射器对Mapstruct进行单元测试?

钱和安
2023-03-14

我正在尝试按如下方式对Mapstruct嵌套映射器进行单元测试:

@Mapper(componentModel = "spring", uses = EventCategoryMapper.class, injectionStrategy = InjectionStrategy.CONSTRUCTOR)
public interface EventMapper {

    
    Event fromEventMO(EventMO eventMO);

    EventMO toEventMO(Event event);

    default Optional<Event> fromOptionalEventMO(Optional<EventMO> optionalEventMO) {
        
        return (optionalEventMO.isEmpty()) ? Optional.empty() : Optional.of(fromEventMO(optionalEventMO.get()));
        
    }
    
}
@Mapper(componentModel = "html" target="_blank">spring", injectionStrategy = InjectionStrategy.CONSTRUCTOR)
public interface EventCategoryMapper {

    
    EventCategory fromEventCategoryMO(EventCategoryMO eventCategoryMO);

    EventCategoryMO toEventCategoryMO(EventCategory eventCategory);

    default String fromPriorityMO(PriorityMO priority) {
        return (priority.getPriority()==null) ? null : priority.getPriority();
    }

我正在尝试测试EventMapper:

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {EventMapper.class, EventCategoryMapper.class, EventMapperImpl.class, EventCategoryMapperImpl.class})
public class EventMapperTest {

    private Mocks mocks; //This object contains the mocked objects that should be mapped.

    @Autowired
    private EventMapper eventMapper;

    @Test
    @DisplayName("Should return an Event from an EventMO")
    void shouldReturnEventfromEventMO() {
        
        var event = eventMapper.fromEventMO(mocks.getEventMO());

        assertEquals(event.getId(), 123L);


    }

但它在以下方面不断失败:

创建名为“eventMapper”的bean时出错:bean的实例化失败;嵌套的异常是org。springframework。豆。BeanInstationException:未能实例化[com.mycompany.cna.projects.fishmarket.back.events.repositories.mappers.event.EventMapper]:指定的类是接口

我已经尝试用Mapper.get映射器(EventMapper.class)实例化映射器,它返回了一个NullPointerExcure。

我应该如何在这些映射器上实现单元测试?

共有1个答案

居和顺
2023-03-14

我已经解决了这个问题。问题是我没有实例化我的Mocks对象。我还在before方法中为EventMapperImpl提供了嵌套映射器的模拟:

    @ExtendWith(SpringExtension.class)
public class EventMapperTest {

    private Mocks mocks;

    private EventMapper eventMapper;

    @Mock
    private EventCategoryMapper eventCategoryMapper;

    @BeforeEach
    void before() {
        eventMapper = new EventMapperImpl(eventCategoryMapper);
        mocks = new Mocks();
    }
    
    @Test
    @DisplayName("Should return an Event from an EventMO")
    void shouldReturnEventfromEventMO() {

        when(eventCategoryMapper.fromEventCategoryMO(any(EventCategoryMO.class))).thenReturn(mocks.getEventCategory());
        var event = eventMapper.fromEventMO(mocks.getEventMO());

        assertEquals(event.getId(), 123L);


    }
 类似资料:
  • 有人能帮忙填写上面的评论部分吗?或者是否有其他选项来映射这些对象? 编辑:我尝试了下面的解决方案,但是接口实现类本身发生了变化。

  • 我创建映射如下所示。如何将平面dto对象属性(街道、城市等)映射到域对象中的嵌套地址。当我试着去做的时候,我发现了一个错误: [错误]诊断:返回类型中的属性“Address.PostalCode”未知。@Mapping(来源=“City”,目标=“Address.City”), 还有类...

  • 我尝试使用MapStruct编写映射器类,如下所示: 目前它显示了“未知属性”“customer.customerid”和“usertypes.usertype.userid”等错误。有人能帮我用MapStruct映射所有这些元素吗? 问题2:我们如何绘制跟踪图?1)customerId usertypes->user->userid 2)pdtPrice offers->OffersType->

  • 我使用MapStruct来映射我的实体,我使用Mockito来嘲笑我的对象。 我想用MapStruct测试一个包含映射的方法。问题是嵌套映射器在我的单元测试中总是为null(在应用程序中工作得很好)

  • 假设我有这些实体: null

  • 我试图找到一个更好的解决方案,以防止Hibernate代理初始化时,通过MapSTRt将实体映射到响应DTO。 我一直在将我们的代码库转换为使用ModelMapper中的MapStruct。如果我想用ModelMapper完成我的要求,我可以做如下简单的事情: 自定义getter方法允许我检查是否已经从数据库中获取了字段,以避免N 1次初始化。 它看起来像: 我不能简单地覆盖普通的getter,因