es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo realizar pruebas unitarias para asegurarse de que todos los objetivos de mapstruct están realmente mapeados?

Estoy pensando en cómo verificar mediante una prueba unitaria para descubrir si todos los objetivos de las asignaciones de mapstruct están activos/en uso…

Tengo la siguiente estructura:

@Mapper(uses = {DateMapper.class, StateMapper.class})
public abstract class Blah
  implements IDtoContextMapper<SourceEntity, StuffDto> {

  @Mapping(source = "id", target = "id")
  @Mapping(source = "someNumber", target = "someStuffNumber")
  @Mapping(target = "status", qualifiedByName = "mapStatus")

  public abstract Blah toDto(
    SourceEntity entity, @Context MappingContext mappingContext);

  @Override
  public Class<StuffDto> getClassOfDto() {
    return StuffDto.class;
  }

  @Override
  public Class<SourceEntity> getClassOfEntity() {
    return SourceEntity.class;
  }
}

Y la implementación generada por mapstruct se ve así:

@Override
public StuffDto toDto(SourceEntity entity, MappingContext mappingContext) {
  StuffDto target = mappingContext.getMappedInstance( entity, StuffDto.class );
  if ( target != null ) {
  return target;
  }

  if ( entity == null ) {
  return null;
  }

  StuffDto stuffDto = new StuffDto();

  mappingContext.incrementDepth( entity, StuffDto );

  stuffDto.setId( entity.getId() );
  stuffDto.setStatus( stateMapper.mapStatus( entity.getStatus() ) );
  stuffDto.setSomeStuffNumber( entity.getSomeNumber() );

  mappingContext.updateOccurences( entity, stuffDto );

  return stuffDto;
}

Lo que estoy buscando es una prueba JUnit simple que verifique que todos los objetivos (=todos los miembros) de StuffDto se asignen de alguna manera (mediante la asignación de origen-destino o mediante qualifiedByName).

¿Qué enfoque podría intentar? Cualquier idea es bienvenida, ¡acabo de empezar a experimentar! 🙂

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una posible forma de verificar que todos los miembros de StuffDto están mapeados es usar reflexión para obtener todos los campos de destino del miembro de la interfaz de mapeo y verificar si se mencionan en las anotaciones @Mapping. Aquí hay un ejemplo de dicha prueba:

    Esta prueba refleja la interfaz de mapeo para obtener todos los nombres de miembros de destino (en este caso, “id”, “status” y “someStuffNumber”). Luego, para cada miembro de destino, verifica si hay un campo con el mismo nombre en la clase StuffDto y si ese campo tiene una anotación @Mapping con un atributo target o qualifiedByName no vacío.

    Tenga en cuenta que este enfoque supone que las anotaciones @Mapping reflejan con precisión la lógica de mapeo, lo que puede no ser siempre el caso si el mapeo es muy complejo o utiliza características avanzadas de MapStruct.

Comments are closed.