Assertj no funciona con Jackson JsonNode.
Estoy utilizando assertj y la combinación de JsonNode de Jackson. Hasta ahora he estado usando Assertions.assertThat(objectNode0).isEqualTo(objectNode1);
y todo funciona bien.
Ahora, necesito ignorar algunos campos en la comparación, y el método que intenté usar es usingRecursiveComparison
, pero no alerta cuando los objetos son diferentes.
¿Hay alguna manera de solucionar esto? Aquí está mi código de ejemplo:
public class Main {
public static void main(String[] args) {
ObjectMapper om = new ObjectMapper();
try {
JsonNode objectNode0 = om.readTree("{\"someNotImportantValue\":1,\"importantValue\":\"10\"}");
JsonNode objectNode1 = om.readTree("{\"someNotImportantValue\":15,\"importantValue\":\"1\"}");
boolean equals = objectNode0.equals(objectNode1);
System.out.println(equals); // imprime false
//Esto funciona, pero no permite ignorar ningún campo
//Assertions.assertThat(objectNode0).isEqualTo(objectNode1);
//Esperaríamos que esta sentencia falle, ya que importantValue sigue siendo diferente, pero no lo hace.
Assertions.assertThat(objectNode0).usingRecursiveComparison().ignoringFields("someNotImportantValue").isEqualTo(objectNode1);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
davy.ai
Es posible superar este problema utilizando la opción “ignoringFieldsMatchingPaths” en lugar de “ignoringFields”. Esta opción toma una matriz de cadenas de expresiones regulares que coinciden con los campos que se deben ignorar. Aquí hay un código de ejemplo actualizado que debería funcionar:
En este ejemplo, la opción “ignoringFieldsMatchingPaths” se utiliza para ignorar cualquier campo que contenga “someNotImportantValue”. Esto debería ignorar correctamente el campo en ambos JsonNodes y comparar el campo importantValue.