Il existe de nombreuses variables qui détermineront le meilleur cadre de tests unitaires à utiliser dans votre situation. Certains éléments pouvant affecter votre choix seront:
- La langue cible.
- Quel support de bibliothèque est disponible. par exemple libc ou une version réduite de celle-ci.
- Le système d'exploitation de la cible. par exemple Aucun, FreeRTOS, personnalisé.
La plupart des frameworks de type xUnit fourniront un niveau de fonctionnalité de base qui peut être utile. J'ai utilisé Cunit avec un certain succès dans le passé. (paquet libcunit1-dev sur Ubuntu / Debian). La plupart des frameworks nécessiteront que libc soit disponible, certains nécessiteront un support supplémentaire du système d'exploitation.
Une autre alternative qui ne fait que 3 lignes est Minunit .
J'ai trouvé que les tests unitaires utilisant le microcontrôleur comme cible étaient assez lourds car vous devez être en mesure de présenter un environnement adapté pour télécharger des tests, les exécuter et ensuite obtenir des résultats. La simple mise en place de la plate-forme qui vous permettra de le faire est une grosse tâche.
Une autre approche que j'ai adoptée et qui a fonctionné pour moi est de faire des tests unitaires sur l'hôte, en implémentant une couche d'abstraction entre les pilotes et le code d'application. Puisque vous utilisez gcc pour la cible, le code doit également être compilé sur l'hôte.
Les tests sur l'hôte de compilation sont généralement beaucoup plus faciles car vous disposez de la prise en charge complète du système d'exploitation hôte et de tous ses outils. Par exemple, lors des tests sur l'hôte, j'ai une version simulée de mon pilote sans fil avec la même interface que le vrai pilote qui s'exécute sur la cible. La version hôte utilise des paquets UDP pour simuler le transfert de paquets sans fil, le pilote factice prenant en charge la possibilité de supprimer des paquets afin que je puisse tester mes protocoles.
Dans le produit sur lequel je travaillais, un OS fileté était utilisé, donc la couche d'abstraction pour tester sur l'OS hôte utilisait pthreads à la place.
Bien qu'il ne soit pas parfait, plus il vous est facile d'écrire et d'exécuter des tests, plus vous avez de chances d'implémenter plus de cas de test. Un autre avantage de l'exécution du code sur différentes plates-formes est de tester que le code est portable. Vous détecterez rapidement les erreurs endiennes si les architectures cible et hôte diffèrent.
Je suis maintenant un peu hors sujet, mais je pense que ces idées peuvent vous aider dans votre choix de cadre de test et de méthodes de test.