14
avr
2009
1

Ecrire des tests unitaires en C++ avec Xcode

Il y a quelques jours, à l’Université, dans le cadre du TP de « Flots de Multiflots dans les Réseaux », j’ai dû stocker et manipuler des graphes en implémentant les algorithmes de Dikjstra, de Bellman-Ford, de Johnson, de Floyd-Warshall afin d’obtenir un plus court chemin.

Les graphes c’est sympa mais je m’en méfie toujours, peut-être parce qu’en licence 3 j’ai dû perdre quelques cheveux lorsque j’ai coder 2-3 algorithmes, relativement simples par rapport à ceux cités avant, sur les graphes. Cette année pour ne pas me faire avoir, j’ai décidé d’utiliser des tests unitaires afin vérifier mon code. C’était en plus une bonne occasion pour découvrir un framework de tests en C++

Pour développer en C++ j’utilise le logiciel de développement proposé par Apple à savoir Xcode. Il est relativement bien fait, rapide à lancer, propose l’auto-complétion et surtout, on peut débugger facilement son programme. En plus de ça, Xcode intègre un framework de tests nommé CPlusTest. Pour ceux que cela intéressent, voici comment écrire des tests unitaires en C++ avec Xcode…

  1. Ouvrez ou créez un projet.
  2. Créez une cible pour les tests unitaires
    1. Dans le panneau latéral gauche, faites un clic droit sur « Targets » et cliquez sur « Add… » > « New Target… ».
    2. Dans la fenêtre qui apparaît, choisissez « Carbon » puis « Unit Test Bundle » et cliquez sur « Next… ».
    3. Entrez un nom pour votre cible, « UnitTest » par exemple, et appuyez sur « Finish ».
  3. Créez une classe à tester
    1. Il nous faut maintenant une classe à tester. Pour cela, clic droit sur le dossier « Source », puis « Add… » > « New File… ».
    2. Choisissez « C++ File » dans le groupe « Carbon » puis appuyez sur « Next… ».
    3. Entrez le nom de votre classe, exemple MyFirstClass. Dans la partie « Targets », vérifiez que « UnitTest » est bien coché puis cliquez sur « Finish ».
    4. Codez une classe MyFirstClass, avec une méthode HelloWorld qui renvoie une string (std::string)
      Le .h :
      #ifndef FIRST_H
      #define FIRST_H

      #include

      class MyFirstClass
      {
      public:
      MyFirstClass();
      std::string HelloWorld();
      };

      #endif
      Le .cpp :
      #include "MyFirstClass.h"

      MyFirstClass::MyFirstClass()
      {
      }

      std::string MyFirstClass::HelloWorld()
      {
      std::string hello = « Hello World »;
      return hello;
      }

  4. Créez les tests unitaires
    1. Il faut maintenant créer un fichier de tests. Pour cela, clic droit sur le nom du projet dans le panneau gauche, « Add… » > « New File… ».
    2. Cliquez sur « Carbon » puis sur « C++ Test Case » et appuyez sur « Next ».
    3. Entrez un nom pour votre fichier de test, « MyFirstClassTest » par exemple. N’oubliez pas de vérifier que dans la partie « Targets », la cible « UnitTest » est bien coché puis cliquez sur « Finish ».
    4. Créez votre première méthode de tests dans MyFirstClassTest.cpp :
      void MyFirstClassTest::test_HelloWorld()
      {
      MyFirstClass *instance = new MyFirstClass();
      CPTAssert(instance->HelloWorld() == "Hello World");
      CPTAssert(instance->HelloWorld() == "Hello");
      }

      (N’oubliez pas d’ajouter l’entête de la méthode dans le .h)
    5. Enregistrez le test. Pour cela dans le fichier MyFirstClassTest.h, ajoutez à la fin :
      MyFirstClassTest test1(TEST_INVOCATION(MyFirstClassTest, test_HelloWorld));
  5. Lancez les tests unitaires
    1. Dans le menu, cliquez sur « Project », allez à « Set Active Target » et choisissez « UnitTest ».
    2. Toujours dans le menu, cliquez sur « Build » puis « Build and Go (Run) ».
    3. Erreur devrez vous être rapportée, c’est le 2e test qui échoue. Si vous supprimez ce test et que vous refaite les étapes 5.1 et 5.2 tout devrait passer sans problème.

Voilà, vous êtes fin prêt pour écrire des tests unitaires en C++ avec Xcode. A noter que c’est la version 3.1 d’Xcode qui a été utilisé pour réaliser ce tutoriel. Il peut y avoir quelques changements selon la version de l’IDE que vous utilisez.

Pour plus d’informations sur les tests unitaires avec Xcode : http://developer.apple.com/documentation/developertools/Conceptual/UnitTesting/UnitTesting.html

Vous avez apprécié ce billet ?
Abonnez-vous au flux RSS pour être informé des nouveaux billets.
1 commentaire :
  1. Francois 23 mai, 2009

    Merci.

Ajouter un commentaire
:D :) :o :eek: :( :lol: :wink: :arrow: :idea: :?: :!: :evil: :p