Découvrez quelle solution de test API est arrivée en tête dans le rapport GigaOm Radar. Obtenez votre rapport d'analyse gratuit >>

Découvrez quelle solution de test API est arrivée en tête dans le rapport GigaOm Radar. Obtenez votre rapport d'analyse gratuit >>
Aller à la section
Vous êtes-vous déjà demandé comment utiliser Parasoft C/C++test avec CMake pour les tests unitaires ? Consultez cet article pour savoir comment.
Aller à la section
Aller à la section
La sortie de C/C++test 2020.1 a introduit la possibilité de intégrer le test C / C ++ avec CMake pour l'analyse statique et les tests unitaires. Cet article se concentre sur l'utilisation du test Parasoft C / C ++ avec des projets basés sur CMake pour les tests unitaires.
Les tests unitaires sont plus compliqués à intégrer dans le processus de développement que l'analyse statique. Au final, le fichier binaire exécutable doit être créé. Cela est particulièrement problématique pour les projets volumineux et complexes composés de plusieurs bibliothèques et exécutables.
Le fichier JSON compile-info, que nous utilisons pour l'analyse statique, ne suffit pas. Il ne fournit pas les informations importantes sur la structure du projet - quels fichiers sont inclus dans quels binaires et ce qui doit être testé ensemble.
Pour permettre une intégration facile des tests unitaires de test Parasoft C/C++ dans les projets basés sur CMake, la version 2020.1 introduit une extension CMake, qui permet de définir des cibles de tests unitaires pour Test C / C ++. Ces cibles génèrent automatiquement les fichiers de projet de test C/C++ qui peuvent être utilisés pour créer, exécuter et gérer des tests unitaires.
L'intention de cette extension est de permettre aux utilisateurs de définir toute l'infrastructure requise pour les tests unitaires de test Parasoft C / C ++ avec leurs cibles habituelles dans les fichiers de configuration CMake.
Voyons comment cela fonctionne en utilisant un exemple de test unitaire à l'aide de l'outil C/C++test Professional – basé sur Eclipse, qui dispose d'une interface utilisateur riche. Téléchargez et installez la version 2020.1, si vous ne l'avez pas déjà fait.
Dans le répertoire d'installation principal de C / C ++ test Professional, vous pouvez trouver l'extension CMake avec l'exemple qui l'accompagne. Voir le répertoire suivant: intégration / cmake.
Pour nos expériences, je recommande de copier le dossier d'intégration / cmake de l'installation vers votre emplacement préféré. La structure de l'exemple est illustrée ci-dessous:
Le dossier de l'application contient la cible «exécutable». Le dossier modules avec ses trois sous-dossiers (mod1, mod2 et mod3) représente les bibliothèques statiques utilisées pour se lier à l'exécutable. En outre, le dossier cmake contient l'extension de test C / C ++ à CMake. Vous souhaiterez peut-être copier ce dossier dans votre projet réel afin d'utiliser cette extension.
Cette structure simplifiée dresse une image des défis typiques auxquels les équipes tentent de mettre en œuvre les tests unitaires: Comment diviser l'ensemble du projet en blocs testables, représentant des groupes de fichiers qui appartiennent logiquement ensemble.
Dans la plupart des cas, les développeurs ne voudront pas exécuter de tests unitaires sur un binaire blob créé par la compilation de tous les fichiers d'un projet entier. Les utilisateurs seront probablement intéressés par l'ajout des cas de test pour les mêmes cibles binaires (exécutables et bibliothèques) qu'ils ont définies dans le projet.
Avant de discuter des détails de la syntaxe de configuration, voyons comment cela fonctionne à l'aide de l'exemple fourni.
1. Dans le répertoire de niveau supérieur où se trouve le dossier de l'application, créez un répertoire de construction, cd dedans et appelez une génération de scripts de construction, comme ci-dessous:
2. Une fois que CMake a terminé la génération des scripts de construction (makefiles), appelez make pour générer l'exemple de projet:
3. Démarrez C / C ++ test professional (l'exécutable cpptest dans le dossier d'installation). Sélectionnez un espace de travail vide, utilisez «Menu Fichier -> Importer… -> Projets existants dans l'espace de travail» et sélectionnez «répertoire racine» pour être le dossier principal dans lequel vous avez copié l'exemple. L'assistant analysera de manière récursive le dossier sélectionné et trouvera tous les projets générés automatiquement. Si vous voyez quelque chose comme ci-dessous, vous pouvez cliquer sur «Terminer».
Eclipse importera tous les projets et vous disposerez d'un nouvel espace de travail prêt pour vos tests unitaires. Vous n'avez rien d'autre à faire pour commencer à ajouter et exécuter les cas de test et à améliorer la couverture de votre code.
4. Dans le navigateur de projet, sélectionnez les trois projets, cliquez avec le bouton droit de la souris et utilisez la configuration de test «Parasoft -> Test utilisant -> Builtin -> Unit Testing -> Generate Unit Tests» pour générer automatiquement les cas de test. Une fois les tests générés, exécutez la configuration «Exécuter les tests unitaires» à partir du même emplacement.
Avec ces quatre étapes simples, vous avez préparé l'infrastructure du projet pour les tests unitaires. L'équipe est maintenant prête à commencer à analyser les cas de test.
En plus des cibles de construction régulières, les fichiers CMakeLists.txt contiennent des cibles de test unitaire. Lors de la génération des scripts de construction avec cmake, les fichiers de projet de test C / C ++ sont également générés automatiquement. Plus tard, au cours du processus de construction, des fichiers de données de construction supplémentaires, requis par les projets de test C / C ++, sont automatiquement générés.
Tout ce qui est nécessaire pour définir la structure des projets de test unitaire est conservé dans les fichiers CMakeLists.txt. L'équipe n'a pas besoin de conserver de fichiers de configuration supplémentaires. Tout est beau et propre. Le projet peut être extrait, des scripts de construction et des projets de test C / C ++ peuvent être générés, des tests peuvent être ajoutés et archivés avec le code source, et des tests complets peuvent être effectués dans le CI.
Examinons de plus près l'extension CMake de test C / C ++ et comment elle aide à définir l'infrastructure des projets de test. Ouvrez le fichier modules / mod1 / CMakeLists.txt. Vous devriez voir quelque chose comme ci-dessous:
Dans les six premières lignes, vous pouvez voir la définition de cible normale. Ici, nous définissons une cible de bibliothèque simple, avec un fichier source mod1.cpp, et un répertoire de fichiers d'inclusion. C'est ce que vous verrez généralement dans vos projets CMake.
Dans la ligne 11, cependant, nous avons une nouvelle fonction CMake qui est fournie avec l'extension de test C / C ++. Cette fonction vous permet de définir la cible de test unitaire, qui génère tous les fichiers de projet de test C / C ++ requis. Vous pouvez trouver la description complète de cette fonction dans les intégrations / cmake / README.md. Dans cet exemple spécifique, les opérations suivantes sont effectuées:
Cette simple définition de cible suffit à générer un projet de test unitaire pour le test Parasoft C / C ++. Les fichiers de projet seront générés à l'emplacement du fichier CMakeLists.txt, ce qui est probablement le plus pratique. Si vous préférez, vous pouvez générer les fichiers de projet en dehors de l'arborescence source et éviter tout problème de fusion. Ceci est montré dans app / CMakeLists.txt:
Pour plus de détails, consultez les fichiers suivants du / integrations / répertoire cmake:
Voici les points importants concernant l'extension.