3.2 Tests unitaires

Tout comme le débogage, les tests des objets connectés impliquent plusieurs dimensions. Voici quelques principaux éléments qui devraient être testés :

  1. Les connexions physiques des capteurs et des actuateurs sur l’objet;
  2. Les données d’entrées et de sorties de l’objet sur ses broches;
  3. La logique programmée dans l’objet;
  4. La communication de l’objet avec Internet : ses données d’entrées et de sorties au niveau client-serveur;
  5. La vitesse de communication par rapport au volume de données échangées, surtout si l’objet devrait réagir en temps réel;
  6. La sécurité : authentification et cryptage des échanges.

Avec Arduino, on peut programmer nos tests unitaires avec la bibliothèque ArduinoUnit. Avec Raspberry Pi, on utilisera l’équivalent en Python, la bibliothèque unittest.


3.2.1 Tests sur Arduino avec ArduinoUnit

La bibliothèque ArduinoUnit peut être installée directement à partir de l’IDE d’Arduino en allant dans le menu Croquis, puis Inclure une bibliothèque, puis Gérer les bibliothèques.

Figure 61 — Gestionnaire de bibliothèque de l'IDE d'Arduino

Figure 61 — Gestionnaire de bibliothèque de l’IDE d’Arduino

Une fois la bibliothèque installée, on doit l’inclure dans notre projet. Ensuite, on peut programmer nos tests et utiliser le moniteur série pour en voir les résultats.

Figure 62 — Tests unitaires en C avec ArduinoUnit

Figure 62 — Tests unitaires en C avec ArduinoUnit

Sur la Figure 62 — Tests unitaires en C avec ArduinoUnit, on présente deux exemples de tests unitaires, identifiés test(nom). À l’intérieur, on utilise la fonction assertEqual(expression, résultat) pour indiquer qu’une expression, ou un appel de méthode, devrait avoir un certain résultat. Ici, on vérifie si une sortie est bien activée et si une entrée est bien désactivée. Dans la boucle principale loop(), l’exécution des tests est lancée avec l’appel à Test::run(); et les résultats s’affichent dans le moniteur série, qu’on doit bien sûr ouvrir.

Figure 63 — Résultats des tests sur le moniteur série du Arduino

Figure 63 — Résultats des tests sur le moniteur série du Arduino

Vidéo 33 : Tests unitaires dans Arduino IDE


3.2.2 Tests sur Raspberry Pi avec unittest

En Python, la bibliothèque unittest nous permet de programmer des tests unitaires. Pour les préparer, on doit programmer une classe qui hérite de unittest.TestCase. Dans cette classe, on pourra définir des méthodes pour chacun de nos tests. Ces méthodes doivent commencer par le mot test. À l’intérieur, on utilisera la méthode assertEqual(expression, résultat) pour indiquer qu’une expression, ou un appel de méthode, devrait avoir un certain résultat. Sur la Figure 64 — Tests unitaires en Python, on présente des exemples pour tester une entrée et une sortie du Raspberry Pi. Pour le premier test, on assume que l’entrée sera à 1, ça pourrait représenter un interrupteur qui devrait être dans une certaine position au moment du test. Dans le deuxième test, on active la sortie directement, mais ça pourrait être remplacé par l’appel d’une fonction qui devrait l’activer.

Figure 64 — Tests unitaires en Python avec unittest

Figure 64 — Tests unitaires en Python avec unittest

Quand nos tests sont prêts, on peut les exécuter avec l’option -v pour afficher le détail des résultats obtenus, c’est-à-dire « ok » ou « FAIL » pour chaque test.

Figure 65 — Exécution des tests unitaires sur Raspberry Pi

Figure 65 — Exécution des tests unitaires sur Raspberry Pi

Vidéo 34 : Tests unitaires sur le Raspberry Pi