Partie 4 : Tests¶
Traduction assistée par IA - en savoir plus et suggérer des améliorations
Les plugins sont des logiciels autonomes auxquels les développeur·ses de pipelines doivent pouvoir faire confiance. Tester chaque fonctionnalité indépendamment, en dehors d'un pipeline, garantit que le plugin fonctionne correctement avant que quiconque ne l'intègre dans un workflow. Dans cette section, vous allez écrire et exécuter des tests à l'aide du framework de test Spock.
Astuce
Vous commencez à partir de cette partie ? Copiez la solution de la Partie 3 pour l'utiliser comme point de départ :
Puis placez-vous dans le répertoire du plugin :
Assurez-vous d'être dans le répertoire du plugin :
1. Pourquoi tester ?¶
Une compilation réussie signifie que le code se compile, mais ne vérifie pas qu'il fonctionne comme prévu.
Les tests unitaires sont de petits morceaux de code qui vérifient automatiquement si vos fonctions produisent la bonne sortie pour une entrée donnée.
Par exemple, un test peut vérifier que reverseGreeting("Hello") retourne "olleH".
Les tests sont utiles car :
- Ils détectent les bugs avant les utilisateur·trices
- Ils vous donnent la confiance nécessaire pour effectuer des modifications sans tout casser
- Ils servent de documentation montrant comment les fonctions doivent être utilisées
2. Comprendre les tests Spock¶
Le template de plugin utilise Spock, un framework de test pour Groovy.
Spock est déjà configuré dans le projet (via build.gradle), vous n'avez donc rien à ajouter.
Si vous avez déjà utilisé des outils de test (comme pytest en Python ou testthat en R), Spock remplit le même rôle : vous écrivez de petites fonctions qui appellent votre code avec des entrées connues et vérifient les sorties.
La différence est que Spock utilise des blocs étiquetés (given:, expect:, when:, then:) qui ressemblent à un processus ou un workflow Nextflow.
Voici la structure de base :
def 'should reverse a greeting'() { // (1)!
given: // (2)!
def ext = new GreetingExtension()
expect: // (3)!
ext.reverseGreeting('Hello') == 'olleH'
}
- Nom du test entre guillemets : Décrit ce que le test vérifie. Utilisez un langage simple.
- Bloc
given:: Préparez ce dont vous avez besoin pour le test (créer des objets, préparer des données) - Bloc
expect:: Les vérifications proprement dites. Chaque ligne doit êtretruepour que le test réussisse
Cette structure rend les tests lisibles : "Étant donné un objet extension, on s'attend à ce que reverseGreeting('Hello') soit égal à 'olleH'."
3. Écrire les tests¶
Écrivez des tests pour les deux fonctions que vous avez créées dans la Partie 3 : reverseGreeting et decorateGreeting.
3.1. Créer la classe de test¶
Ouvrez-le dans votre éditeur et ajoutez le squelette de classe de test vide :
| src/test/groovy/training/plugin/GreetingExtensionTest.groovy | |
|---|---|
- Toutes les classes de test Spock étendent
Specification. C'est le point de départ de tout fichier de test Spock.
3.2. Tester reverseGreeting¶
Ajoutez une méthode de test à l'intérieur du corps de la classe.
Le bloc given: crée une instance de GreetingExtension, et le bloc expect: vérifie que reverseGreeting inverse correctement deux entrées différentes.
Cela teste la fonction directement, sans exécuter de pipeline.
- Créez une instance de votre extension pour la tester directement, sans exécuter de pipeline
- Chaque ligne dans
expect:est une assertion ; le test réussit uniquement si toutes sonttrue
3.3. Tester decorateGreeting¶
Ajoutez une deuxième méthode de test après la première.
Celle-ci vérifie que decorateGreeting encadre la chaîne d'entrée avec *** de chaque côté.
4. Exécuter les tests¶
Sortie des tests
Où sont les résultats des tests ? Gradle masque la sortie détaillée lorsque tous les tests réussissent. "BUILD SUCCESSFUL" signifie que tout a fonctionné. Si un test échoue, vous verrez des messages d'erreur détaillés.
Ajouter un test de cas limite
Ajoutez un test qui vérifie que reverseGreeting gère une chaîne vide.
Que doit retourner reverseGreeting('') ?
Ajoutez le test, exécutez make test et vérifiez qu'il réussit.
5. Consulter le rapport de tests¶
Gradle génère un rapport de tests HTML avec les résultats détaillés de chaque test. Démarrez un serveur web dans le répertoire du rapport :
VS Code vous invitera à ouvrir l'application dans votre navigateur. Naviguez jusqu'à votre classe de test pour voir les résultats individuels de chaque test :

Le rapport affiche chaque méthode de test et indique si elle a réussi ou échoué.
Appuyez sur Ctrl+C pour arrêter le serveur, puis revenez au répertoire précédent :
Retournez dans le répertoire principal du projet :
À retenir¶
Vous avez appris que :
- Les tests Spock utilisent une structure lisible
given:/expect: - Utilisez
make testpour exécuter les tests etbuild/reports/tests/test/pour le rapport HTML - Les tests vérifient le comportement et servent de documentation sur la façon dont les fonctions doivent être utilisées
Et ensuite ?¶
Jusqu'à présent, votre plugin ajoute des fonctions personnalisées que les pipelines peuvent appeler. Les plugins peuvent également réagir aux événements du workflow (une tâche qui se termine, un fichier publié, le pipeline qui se termine) à l'aide d'observateurs de trace. Dans la prochaine section, vous allez créer un observateur qui compte les tâches terminées et affiche un résumé lorsque le pipeline se termine.