Utilitaires Commons Collections
Dans le cadre de projet, les manipulations sur les listes sont courantes et récurrentes. IL n'est pas rare d'effectuer des tests, de nullité ou de taille par exemple, qui peuvent impacter sur la lisibilité du code, voir de la note de compléxité fournie par Sonar.
Par exemple, il est courant d'effectuer le test suivant.
List<String> myList = getAList();
if (null != myList && myList.size() > 0) {
// Do something
} else {
// Do something
}
Dans ce cas, il est impératif de tester la nullité, mais la compléxité est augmentée. Cet article présente un ensemble de fonctions, dans la classe org.apache.commons.collections4.CollectionUtils
, fournis par la librairie, qui va permettre d'externaliser des actions simples.
Votre avis
Nobody voted on this yet
|
|
Test de taille
Comme évoqué dans l'introduction, la taille des collections est régulièrement testée. Les deux fonctions isEmpty
, pour tester si null ou vide, et isNotEmpty
, pour tester si non null et contient au moins un élément, vont permettre de s'affranchir de deux conditions de tests.
Le test unitaire fr.ejn.tutorial.apache.commons.collections4.CollectionUtilsTest
présente cette utilisation.
@Test
public void testIsEmpty() {
List<String> actual = null;
Assert.assertTrue("Validate isEmpty on null", CollectionUtils.isEmpty(actual));
actual = new ArrayList<String>(50);
Assert.assertTrue("Validate isEmpty on empty, but initialized list", CollectionUtils
.isEmpty(actual));
actual.add("String 1");
Assert.assertFalse("Validate isEmpty on not empty on completed list", CollectionUtils
.isEmpty(actual));
}
@Test
public void testIsNotEmpty() {
List<String> actual = null;
Assert.assertFalse("Validate isNotEmpty on null", CollectionUtils.isNotEmpty(actual));
actual = new ArrayList<String>(50);
Assert.assertFalse("Validate isNotEmpty on empty, but initialized list", CollectionUtils
.isNotEmpty(actual));
actual.add("String 1");
Assert.assertTrue("Validate isNotEmpty on not empty on completed list", CollectionUtils
.isNotEmpty(actual));
}
Le test sur la taille s'effectue donc en un seul appel de fonction.
Ajout de données
Pour certains projets, il est nécessaire d'effectuer un mapping de données. Il peut être souhaité de ne jamais ajouter de valeur null dans la collection. Ceci entraîne donc l'ajout d'un test de nullité sur l'objet à ajouter de la façon suivante.
List<String> myList = getAList();
String value = getValue();
if (null != value) {
myList.add(value);
}
Toujours en terme de compléxité, le test de nullité a ajouter une unité qui est en soit très simple. Mais afin de réduire cette note, il est possible d'utiliser la fonction addIgnoreNull
effectue l'ajout de l'objet uniquement si il est non null, comme son nom l'indique.
Le test unitaire fr.ejn.tutorial.apache.commons.collections4.CollectionUtilsTest
présente cette utilisation.
@Test
public void testAddIgnoreNull() {
List<String> actual = new ArrayList<String>();
CollectionUtils.addIgnoreNull(actual, "String 1");
CollectionUtils.addIgnoreNull(actual, null);
CollectionUtils.addIgnoreNull(actual, "String 2");
Assert.assertEquals("Validate list size", 2, actual.size());
Assert.assertEquals("String 1", actual.get(0));
Assert.assertEquals("String 2", actual.get(1));
}