Exécution des tests

tox est un outil permettant de configurer l’exécution des tests. Ainsi, après installation de tox dans votre environnement virtuel via pip install tox, il vous suffit d’exécuter tox -e py3 pour lancer les tests et tox -e linters pour vérifier la syntaxe du code.

Tests unitaires

Les tests sont gérés par pytest dans le module squirrelbattle.tests. Le module pytest-cov permet de mesurer la couverture du code. Pour lancer les tests, il suffit de lancer tox -e py3 ou de manière équivalente pytest --cov=squirrelbattle/ --cov-report=term-missing squirrelbattle/

L’intégration continue lance les tests pour les versions de Python de 3.6 à 3.10, sur une distribution Alpine Linux.

Chaque partie du code est testée unitairement, pour obtenir une couverture maximale et assurer un bon fonctionnement. En particulier, le jeu est lancé en commençant sur une carte déterministe (non générée aléatoirement) chargée depuis assets/example_map.txt, sur laquelle sont placés des ennemis et objets avec lesquels le joueur doit interagir. On vérifie qu’à chaque touche appuyée, il se passe le bon comportement. Le comportement des différents menus est également testé.

L’environnement de test ne disposant pas a priori d’un terminal, le jeu est conçu pour fonctionner sans support graphique, avec un terminal fictif où les primitives de curses sont implémentées pour ne rien faire. On ne peut alors pas s’assurer du bon fonctionnement de curses.

De plus, une très fine partie du code est ignorée lors de la couverture, ce qui correspond à la phase d’initialisation du terminal et à la boucle infinie qui reçoit les touches de l’utilisateur, qu’il est alors impossible de tester unitairement.

Analyseur syntaxique

flake8 est utilisé en guise d’analyseur syntaxique. Il vérifie si le code est bien formatté afin d’assurer une certaine lisibilité. En particulier, il vérifie l’indentation, si chaque variable est bien utilisée, s’il n’y a pas d’import inutile et s’ils sont dans l’ordre lexicographique, si chaque ligne fait au plus 80 caractères et si la signature de chaque fonction est bien spécifiée.

Pour lancer l’analyse, tox -e linters suffit. L’intégration continue effectue cette analyse à chaque commit.