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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 confirmé
    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
    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 très actif

    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
    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,

  4. #4
    Membre confirmé
    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
    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 très actif

    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
    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.

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    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...

+ 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