Cette section fournit un exemple concret démontrant comment utiliser JSONUnit et ASSERTJ ensemble pour les tests unitaires JSON en Java. Nous tirons parti des affirmations courantes d'Assertj pour la lisibilité et les capacités de JSONUnit pour gérer les comparaisons JSON.
import org.assertj.core.api.Assertions; import net.javacrumbs.jsonunit.JsonAssert; import org.json.JSONObject; import org.junit.jupiter.api.Test; public class JsonUnitTestExample { @Test void testJsonEquality() { String expectedJson = "{\"name\":\"John Doe\",\"age\":30,\"city\":\"New York\"}"; String actualJson = "{\"age\":30,\"city\":\"New York\",\"name\":\"John Doe\"}"; JsonAssert.assertEquals(expectedJson, actualJson); //Order doesn't matter with JsonUnit //Alternatively, using AssertJ for more descriptive failure messages: Assertions.assertThat(JsonAssert.jsonObject(expectedJson)).isEqualTo(JsonAssert.jsonObject(actualJson)); } @Test void testJsonPartialEquality() { String expectedJson = "{\"name\":\"John Doe\",\"age\":30,\"city\":\"New York\",\"country\":\"USA\"}"; String actualJson = "{\"name\":\"John Doe\",\"age\":30}"; // Using JsonUnit's ignoring strategy JsonAssert.assertEquals(expectedJson, actualJson, (node1, node2) -> node1.getNodeName().equals("country")); // Alternatively, using AssertJ with JsonUnit's ignoring functionality within a custom comparator // This gives more control and potentially better error messages Assertions.assertThat(JsonAssert.jsonObject(actualJson)).usingComparator(JsonAssert.when( (node1, node2) -> node1.getNodeName().equals("country") )).isEqualTo(JsonAssert.jsonObject(expectedJson)); } @Test void testJsonWithAssertJAssertions(){ JSONObject expectedJson = new JSONObject("{\"name\":\"John Doe\",\"age\":30}"); JSONObject actualJson = new JSONObject("{\"name\":\"John Doe\",\"age\":30}"); Assertions.assertThat(JsonAssert.jsonObject(actualJson).toString()).isEqualTo(expectedJson.toString()); // Or using JsonUnit's direct comparison JsonAssert.assertEquals(expectedJson, actualJson); } }
Cet exemple démontre des vérifications de base de l'égalité et des vérifications partielles de l'égalité en utilisant le mécanisme d'ignorance de JsonUnit et présente comment intégrer cela avec ASsertJ pour une liaison et un rapport d'erreur accrus. N'oubliez pas d'inclure les dépendances nécessaires dans votre pom.xml
(ou un fichier de build équivalent).
JSONUnit excelle à comparer les structures JSON, à gérer les variations dans l'ordre et à ignorer les champs spécifiques. AssertJ fournit une API couramment et lisible pour les affirmations. Les combiner exploite les forces des deux bibliothèques. Une utilisation efficace implique:
JsonAssert.assertEquals()
pour comparer des structures JSON ou de ses parties entières. JSONUnit gère automatiquement les subtilités de la comparaison JSON, y compris l'indépendance de l'ordre. assertThat()
. Cela améliore la lisibilité de vos tests et fournit des messages d'erreur plus informatifs lorsque les affirmations échouent. Cela vous permet de chaîner des assertions ASSERTJ supplémentaires si nécessaire. when()
de JSONUnit pour les comparaisons sophistiquées: pour des scénarios complexes nécessitant d'ignorer des champs spécifiques ou d'appliquer la logique de comparaison personnalisée, utilisez la méthode when()
de JSONUnit JsonAssert.assertNodeEquals()
Explorez différentes méthodes d'assertion offertes par JSONUnit, telles que Plusieurs pièges peuvent entraver l'efficacité des tests unitaires JSON avec JSONUnit et AssertJ:
Bien qu'il n'y ait pas un seul référentiel définitif présentant toutes les meilleures pratiques, plusieurs ressources fournissent des exemples précieux:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!