A l'heure du déploiement massif d'API REST et de l'utilisation intensive du format JSON, il est très utile de pouvoir tester de manière simple mais efficace les différents flux que nous mettons à disposition.
Malgré la simplicité du format Json, la mise en place de test unitaire est toujours un peu fastidieuse sur ce format.
En effet, la représentation du flux est sous forme de chaîne de caractères. Comparer deux flux strictement identiques cela ne pose aucun problème.
Par contre deux flux identiques sur le contenu mais dans un ordre différent cela se complique.
Pour traiter ce cas, il va falloir parcourir chacun des éléments et ensuite faire des comparaisons un à un afin de vérifier que tous les éléments d'un flux sont bien présents dans le second. Je vous laisse imaginer le code à écrire et surtout à relire ultérieurement.
C'est précisément là que la librairie JSONassert intervient.
Cet outil permettra de faire des comparaisons de flux Json au niveau de la structure mais aussi des données.
L'exemple présenté sur le site de la librairie est assez éloquent :
JSONObject data = getRESTData("/friends/367.json");
String expected = "{friends:[{id:123,name:\"Corby Page\"},{id:456,name:\"Carter Page\"}]}";
JSONAssert.assertEquals(expected, data, false);
La librairie propose deux types de vérification : une vérification stricte qui impose que les flux soient strictement identiques et l'autre qui tolérera que tous les champs résultats ne soient pas dans les champs attendus (très pratique pour vérifier quelques champs importants, sans vérifier tout le contenu du flux JSON). Dans tous les cas, l'ordre des champs n'a pas d'importance. Le deuxième mode est recommandé.
Actuellement, la librairie supporte comme framework de test _JUnit_.
Comme toute bonne librairie, un quick start est proposé afin de rapidement prendre en main l'outil. Vous trouverez aussi un CookBook également très utile pour répondre aux cas classiques.
JSONassert est disponible sur les repos traditionnels Maven.
Bons tests !