Ici TDD s’applique à un batch Spring Batch, un batch d’extraction est pris comme exemple pour appliquer la démarche.

Les sources complètes sont sur Github : springbatch-sample

Voici la spécification du batch d’extraction d’une base de données dans un fichier plat :

1 Job contient

  • 1 validateur de présence du paramètre chemin du fichier en sortie
  • 1 étape contient
    • 1 reader jdbc
    • 1 writer fichier plat

Le plan de test du batch est le suivant

  • TDD reader jdbc et ensuite
  • TDD writer fichier plat et ensuite
  • TDD job extraction

Le SUT se présente sous la forme de classes java de configuration spring (aucun xml n’a été utilisé…)

Des classes génériques de configuration et des commodités de test telles que des Rules Junit et des templates de reader et writer sont fournies par le module springbatch-support.

On déroule le plan de test, d’abord le TDD du reader jdbc

Quelques explications sur le test du reader jdbc

  • JobExtractionTestConfiguration crée des beans spring utilitaires pour les tests et importe la classe à tester JobExtractionConfiguration
  • La rule BatchProperties créée un fichier de properties temporaire pour configurer les datasources
    • une datasource pour la base de données technique Spring Batch
    • une datasource fonctionnelle pour lire les données à extraire
  • La rule DBunit insère les données de test dans une base mémoire
  • Le composant ItemReaderTemplate permet de récupérer tous les items de la base de données

On enchaîne sur le TDD du writer fichier plat

  • La méthode static getStepExecution est nécessaire pour injecter tardivement (late binding) le paramètre de chemin du fichier de sortie
  • La rule TemporaryFolder permet de créer un fichier de sortie temporaire
  • Le composant ItemWriterTemplate permet d’écrirer tous les items dans le fichier de sortie

Et on finit par le TDD du job extraction

Voilà, TDD permet de contrôler pas à pas et sans douleur la réalisation d’un batch Spring Batch.

Lorsque le dernier composant de test passe au vert alors le batch est conforme à la spécification, voir la solution complète sur Github : springbatch-sample.

Quant au code factorisé dans le module springbatch-support c’est la dernière étape de TDD (clean & refactor)  qui l’a fait émergé.

 

 

 

Publicités