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.

AssertJ: compara los campos entre las clases DTO y entidad

Necesito comparar una clase DTO con su clase Entity.

Por ejemplo, una clase AddressDTO sería:

@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class AddressDTO {
private StringTypeDTO text;
private List<stringtypedto> line;
private StringTypeDTO city;
private StringTypeDTO district;
private StringTypeDTO state;
private StringTypeDTO postalCode;
private StringTypeDTO country;
}

y mi clase AddressEntity sería:

@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Address {
private StringType text;
private List<stringtype> line;
private StringType city;
private StringType district;
private StringType state;
private StringType postalCode;
private StringType country;
}

¿Hay alguna forma de comparar esos dos objetos usando assertj?

StringType:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class StringTypeDTO {
private String value;
}

Y StringType:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class StringType {
private String value;
}

Quiero evitar escribir código como:

assertThat dto.field1 es igual a entity.field1 del objeto
assertThat dto.field2 es igual a entity.field2 del objeto
assertThat dto.field3 es igual a entity.field3 del objeto

¿Alguna idea?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes usar assertj para comparar la clase DTO con su clase Entity. Una forma de lograr esto es utilizando el método isEqualToComparingFieldByField en assertj, el cual compara los campos públicos de dos objetos que tienen el mismo nombre. Aquí tienes un ejemplo:


    // asumiendo que has creado una instancia de AddressDTO y AddressEntity assertThat(addressDTO).isEqualToComparingFieldByField(addressEntity);

    Esto comparará los campos públicos de AddressDTO con los campos públicos de AddressEntity, y comprobará que son iguales.

    Ten en cuenta que esto no compara ningún campo privado, pero en tu caso, todos los campos de ambas clases son privados, pero se acceden a través de setters y getters, por lo que no hay distinción.

Comments are closed.