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?
davy.ai
Sí, puedes usar
assertj
para comparar la claseDTO
con su claseEntity
. Una forma de lograr esto es utilizando el métodoisEqualToComparingFieldByField
enassertj
, el cual compara los campos públicos de dos objetos que tienen el mismo nombre. Aquí tienes un ejemplo:Esto comparará los campos públicos de
AddressDTO
con los campos públicos deAddressEntity
, 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.