IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Tests unitaires avec CxxTest


Sujet :

C++

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Tests unitaires avec CxxTest
    Bonjour,

    J'ai pas mal de problèmes avec CxxTest. J'ai lu la documentation bien que certains points me soient restés très obscurs...

    Je dois tester la classe : GspCcsdsPacketHeader.hpp.

    J'ai créé une classe : MySuite.hpp qui contient les fonctions de tests et les fonctions setUp et tearDown.

    Exemple de quelques tests définis dans la classe
    :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    #ifndef MYSUITE_H_
    #define MYSUITE_H_
     
    #include "cxxtest/TestSuite.h"
    #include <Rpw/Structures/GspCcsdsPacketHeader.hpp>
     
     
    class MySuite : public CxxTest::TestSuite {
     
    private:
    	static const int BUFFER_SIZE = 5 * 1024;
    	unsigned char packetBuffer1[BUFFER_SIZE];
    	CcsdsPacketHeader<PacketHeaderType::TM_PACKET, PacketHeaderFlag::WITH_HEADER> *ccsdsPacketHeader1;
     
    public:
     
    	void setUp() {
    		ccsdsPacketHeader1 = new (packetBuffer1) CcsdsPacketHeader<PacketHeaderType::TM_PACKET, PacketHeaderFlag::WITH_HEADER> ;
     
    		for (int i = 0; i < BUFFER_SIZE; i++) {
    			packetBuffer1[i] = 0;
    		}
    	}
     
    	void tearDown() {
    	}
     
    	void resetPacketBuffer(unsigned char value, int bufferSize, unsigned char *packetBuffer ) {
    		for (int i = 0; i < bufferSize; i++) {
    			packetBuffer[i] = value;
    		}
    	}
     
    	void testGspCcsdsPacketHeader_setPacketId() {
    		ccsdsPacketHeader1->setPacketId(0x1234);
    		TS_ASSERT_EQUALS(packetBuffer1[0],0x12);
    		TS_ASSERT_EQUALS(packetBuffer1[0],0x12);
    		TS_ASSERT_EQUALS(packetBuffer1[1],0x34);
    		ccsdsPacketHeader1->setPacketId(0x5678);
    		TS_ASSERT_EQUALS(packetBuffer1[0],0x56);
    		TS_ASSERT_EQUALS(packetBuffer1[1],0x78);
    	}
     
    	void testGspCcsdsPacketHeader_getPacketId() {
    		unsigned short packetId = ccsdsPacketHeader1->getPacketId();
    		TS_ASSERT_EQUALS(packetId,0x5678);
    	}
     
    	void testGspPacketHeader_setCcsdsVersionNumber() {
     
    		resetPacketBuffer(0xFF,BUFFER_SIZE,packetBuffer1);
     
    		CcsdsVersionNumberType::CcsdsVersionNumberTypeEnum ccsdsVersionNumber = CcsdsVersionNumberType::CCSDS_VERSION_NUMBER;
    		ccsdsPacketHeader1->setCcsdsVersionNumber(ccsdsVersionNumber); // Set
     
    		TS_ASSERT_EQUALS(packetBuffer1[0], 0x1F); // The first three bits equal to 0 (Version Number)
    	}
    };
     
    #endif /* MYSUITE_H_ */
    Ensuite j'ai créé un .bat pour générer MySuite.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    set CYGWIN=nodosfilewarning
     
    echo COUCOU_LE_MONDE
     
    c:\cygwin\bin\python.exe C:\opt\cxxtest-4.0.3\cxxtest\bin\cxxtestgen -o C:\home\leeroy-ma\workspace\CxxtestTester\src\MySuite.cpp C:\home\leeroy-ma\workspace\CxxtestTester\src\MySuite.hpp
     
    pause
    J'ai été obligée de mettre les chemins absolus. De plus, je ne peux pas mettre d'autres options, comme --error-printer, ça me fait une erreur ensuite dans le main sur MySuite.cpp, auquel je n'y comprends rien du tout -.-

    J'ai configuré Eclipse de sorte à ce que ce .bat soit exécuté en prebuild.

    Quand j'essaie ensuite de l'exécuter, il me donne bien MySuite.cpp au bon endroit.
    Par contre quand j'essaie de compiler tout le programme complet, j'ai l'indication de 5 erreurs dans des fichiers fournis par cxxtest (que je ne dois donc pas toucher ....) :

    1. `numberToString' undeclared (first use this function) dans \Descriptions.cpp

    2. `RealSuiteDescription' has not been declared dans \LinkedList.cpp

    3. `template<class N> char* CxxTest::numberToString(N, char*, N, unsigned int, unsigned int)' used prior to declaration dans \ValueTraits.h

    4. aggregate `std::ifstream is1' has incomplete type and cannot be defined dans \TestSuite.cpp

    5. aggregate `std::ifstream is2' has incomplete type and cannot be defined dans \TestSuite.cpp

    Y-a-t-il quelque chose que j'ai mal fait ? Ai-je bien suivi les procédures pour mettre en place cxxtest ?

    Merci par avance pour votre aide.

  2. #2
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re :
    Bonjour,

    Personne n'a donc fait de tests avec CxxTest ?

    Depuis une semaine je suis toujours au même point et je n'avance pas.
    J'ai lu beaucoup de choses à ce sujet mais je n'y arrive toujours pas, quelqu'un pourrait-il m'aider ? =/

    Merci par avance

  3. #3
    Membre expérimenté

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Points : 1 418
    Points
    1 418
    Par défaut
    Bonjour,

    je ne connais pas du tout ce dont tu parles (pas les TU, mais Cxxmachin-chose). Je ne comprends toutefois pas pourquoi tu appelle python.exe pour compiler des sources C++...

    Cordialement,
    Nullius in verba

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re :
    J'appelle python car je dois exécuter le script cxxtestgen.

    Peut-être que ce n'est pas du tout comme ça qu'il faut l'exécuter, mais je ne comprends pas ce que je dois faire exactement pour l'exécuter...

  5. #5
    Membre expérimenté

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Points : 1 418
    Points
    1 418
    Par défaut
    Tout dépend du format, mais selon que ton cxxtestgen soit au format bat, ou autre, la façon de faire n'est pas la même.

    tu peux essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    start C:\opt\cxxtest-4.0.3\cxxtest\bin\cxxtestgen
    pour exécuter ton script, mais je promet rien, encore une fois ça dépend du format.

    Quand-est-ce que tu compile les sources c++ (en tout cas avec python.exe ça peut pas marcher) ? avec un compilateur c++ ?

    Edit : je peux pas te dire ce que tu dois faire, mais déjà il serait bien d'identifier à quaoi sert ce script.
    Nullius in verba

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    C'est un script qui analyse les .h pour générer des .cpp qu'il suffit ensuite de compiler.
    Je soupçonne un soucis au niveau de la chaine de compilation -- typiquement l'utilisation de .bat me dépasse, et n'utilisant pas éclipse je ne saurais dire comment intégrer CxxTest avec ce dernier.

    Autre piste possible : des erreurs dans les nouvelles versions de CxxTest. J'en étais resté aux versions d'il y a 7ans avec leur script en perl.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re :
    Oui, cela me créé un .cpp que je compile ensuite avec Eclipse.

    C'est à ce moment là que je reçois des erreurs en grand nombre comme :

    1. undefined reference to `char* CxxTest::numberToString

    2. undefined reference to `void CxxTest::doAssertDiffers

    J'ai fait deux essais sur Eclipse :

    - avec import de ce que j'ai téléchargé sur le site (tout le dossier cxxtest-4.0...) et donc compilation du tout : j'obtiens les erreurs affichées sur le premier message
    - sans import : j'obtiens les erreurs de ce message

    peut-être est-ce un soucis de version en effet, je peux toujours essayer

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Bonjour,

    Je te conseille d'utiliser CxxTest avec CMake. Il te génèrera ton code et l'exécutable de ton test.

    Tu peux trouver un exemple ici.

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut RE :
    J'aurais pourtant aimé réussir avec un .bat comme je le faisais, qui me génère mon exécutable.

    Pour les 'undefined reference' que je vois dans mes erreurs, voici ce que j'ai lu sur un forum : "Undefined reference" is a linker error when a function has been properly declared and used, but the definition has not been included when linking.

    Il semblerait qu'il me manque un fichier compilé ou un autre .cpp qui fasse le lien. Je ne comprends pas vu que j'ai téléchargé ce que le site me proposait.

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Je pense que tu as oublié d'ajouter le dossier de cxxtest dans la variable PATH:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set PATH=C:\opt\cxxtest-4.0.3\cxxtest

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re :
    Je vérifierai demain, merci pour l'idée, je n'y avais pas pensé

  12. #12
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re :
    Je viens de vérifier et je l'avais bien mis -.-

  13. #13
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Est-ce que tu as ajouté tous les fichiers d'entêtes et sources au niveau de la ligne de commande?

    Par exemple, je ne vois pas Rpw/Structures/GspCcsdsPacketHeader.hpp dans ton script.

  14. #14
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re :
    C'est à dire ?

    Cette classe ainsi que la définition de ses méthodes est bien inclue dans mon projet.

  15. #15
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re :
    Erreur résolue :

    Eclipse compilait avec l'option : instancier les template de façon explicite.

    Cependant, les fonctions avec lesquelles j'avais des problèmes étaient instanciées de façon implicites.

    Merci pour votre aide !

  16. #16
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut

    Qu'est-ce que c'est que cette option ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  17. #17
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re :
    Celle-ci : -fno-implicit-templates


    Dans l'embarqué c'est mieux de l'utiliser afin de savoir 'exactement' où se trouvent les choses, apparemment.

    Il fallait le savoir!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Test unitaire avec DUnit
    Par stef_chand dans le forum Outils
    Réponses: 1
    Dernier message: 07/09/2007, 15h40
  2. Test unitaire avec C# et nunit
    Par jeromechezgdf dans le forum C#
    Réponses: 6
    Dernier message: 16/07/2007, 11h51
  3. Tests unitaires avec vbUnit sur des contrôles utilisateurs
    Par Patrick Mortas dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 07/09/2006, 18h06
  4. test unitaire avec python
    Par Abla23 dans le forum Zope
    Réponses: 4
    Dernier message: 30/06/2006, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo