mercredi 24 septembre 2008

shunit2

Hello,
j'inaugure donc ce blog avec un article sur shunit2.

Comme son nom l'indique shunit2 est un utilitaire dans la lignée des XUnit, dont le but est d'écrire des tests unitaires pour un script shell.

Tout d'abord comment l'installer :
  • Rendez-vous sur http://code.google.com/p/shunit2/downloads/list
  • Téléchargez et décompressez le tgz
  • Puis un petit make build devrait faire l'affaire
  • Copier shunit2 depuis le répertoire build vers le répertoire de votre choix (/usr/bin par exemple)
Vous êtes maintenant prêt à écrire votre premier test unitaire shell. Pour cet article nous allons créer un script qui va permettre de calculer si une année est bisextile (exemple bateau s'il en est).

Allons-y, étant de vrais barbus, on y va mais TDD !

Dans le fichier is_leap_test.sh :

testNeedsParameter()
{
STANDARD_OUT=`sh is_leap.sh`
assertEquals 2 $?
assertEquals "Usage : is_leap.sh YEAR" "$STANDARD_OUT"
}

. shunit2


Si vous exécuté ce script vous obtenez ceci :

#
# Performing tests
#
testNeedsParameter
sh: Can't open is_leap.sh
ASSERT:expected: <Usage: is_leap.sh YEAR> but was:<>

#
# Test report
#
tests passed: 1 50%
tests failed: 1 50%
tests skipped: 0 0%
tests total: 2 100%


La moitié des assertions ont échouées, le message d'erreur nous indique que la sortie standard ne contient pas le texte attendu. Par contre le script à bien retourné le code de sortie attendu... Ce qui veux dire que sh renvoi un code de sortie 2 lorsqu'il ne trouve pas le fichier à exécuter...

On note au passage que même si une assertion échoue, les tests restants ainsi que les assertions suivantes du même test sont quand même exécutés.

Passons donc au code de notre script :

#!/usr/bin

if [ $# -ne 1 ]; then
echo "Usage : $0 YEAR"
exit 2
fi

et maintenant notre test renvoi


#
# Performing tests
#
testNeedsParameter

#
# Test report
#
tests passed: 2 100%
tests failed: 0 0%
tests skipped: 0 0%
tests total: 2 100%

Voilà ! Je m'arrête là pour la démonstration de shunit2, vous trouverez le code complet du test et du script là : testShunit2.tgz

Aucun commentaire: