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.