Intégration continue sans serveur : les tests
Lorsqu'on travaille avec des tests, il est important de les lancer régulièrement. Par contre, lorsqu'on est seul (ou peu nombreux, ie <=3) à travailler sur un projet, il est coûteux de mettre en place un serveur d'intégration continue.
Dans les projets où je suis seul développeur, j'ai tout de même automatisé le lancement des tests. Pour ce faire, j'utilise deux choses : un Makefile, qui définit comment lancer les tests, et un hook git, pour bloquer le push si les tests ne passent pas. De cette manière, je suis sûr que ce que le code que je livre passe les tests.
Le hook git est à placer dans .git/hooks/pre-push et contient le code suivant :
#!/bin/sh make tests exit $?
Il lance simplement les tests et échoue si les tests échouent.
Maintenant, dans mon Makefile, j'ai le contenu suivant :
tests: python -m unittest tests
Ce Makefile simplissime ne fait que lancer les tests contenus dans le module tests. L'avantage de cette méthode est que le jour où un serveur d'intégration continue est mis en place, on peut réutiliser ce Makefile pour lancer les tests.
J'ai fait un projet de démonstration pour le lancement des tests : mini-ci. Pour essayer :
git clone https://github.com/arthru/mini-ci.git cd mini-ci make hooks make tests
Il vous suffit alors de faire un commit puis un git push pour constater que le push est bloqué lorsque le test échoue (ce qui devrait arriver une fois sur deux).