Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/01/2013, 15h10   #1
manticore
Membre éclairé
 
Marc
Ingénieur sécurité
Inscription : novembre 2009
Messages : 282
Détails du profil
Informations personnelles :
Nom : Marc
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur sécurité

Informations forums :
Inscription : novembre 2009
Messages : 282
Points : 319
Points : 319
Par défaut Création de mock avec cxxtest

Bonjour,

je me met au test unitaire et j'éprouve de grande difficulté à comprendre comment les mocks fonctionnent. Et internet est assez avare en détail, on n'y trouve que 2-3 example sans plus d'explication.

Je veux réaliser un premier mock qui remplace opendir de <dirent.h>.

Voici donc mes classes :

//dirent_mock.cpp
Code :
1
2
3
#define CXXTEST_MOCK_TEST_SOURCE_FILE
 
#include "dirent_mock.h"
// dirent_mock.h
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef DIRENT_MOCK_H_
#define DIRENT_MOCK_H_
 
#include <dirent.h>
#include <cxxtest/Mock.h>
 
// Prototype: DIR * opendir (const char *dirname)
CXXTEST_MOCK_GLOBAL(
DIR*,                                // Return type.
opendir,                             // Name of the function.
(const char* dirname),        // Prototype.
(dirname)                          // Argument list.
);
 
#endif /* DIRENT_MOCK_H_ */
// dirent_real.cpp
Code :
1
2
#define CXXTEST_MOCK_TEST_SOURCE_FILE
#include <dirent.h>
// et mon fichier de test
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef TESTPLGLOADER_H_
#define TESTPLGLOADER_H_
 
#include <cxxtest/TestSuite.h>
#include "./mock/dirent/dirent_mock.h"
 
class MockObject : public T::Base_opendir
{
	public:
		MockObject() {}
		DIR* opendir(const char* dirname) { return opendir("/home/manticore/workspace/");}
 
};
 
class testPlgLoader : public CxxTest::TestSuite
{
	public:
			void test1()
			{
				TS_ASSERT_EQUALS(2, 2);
			}
};
 
#endif /*TESTPLGLOADER_H_*/

Actuellement le code compile, mais j'ai le message d'erreur suivant :

Citation:
Error: untrapped signal:

SIGABRT: execution aborted (failed assertion, corrupted heap, or other problem?)
Ma fonction à tester est la suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PlgLoader::PlgLoader(const std::string& _pathConfig)
{
	// Load configuration.
	m_config = Config(_pathConfig);
 
	DIR* rep;
 
       // Je veux tester ce opendir !
	rep = opendir(m_config.getPathPlugin().c_str());
	struct dirent *lecture;
 
	// Prepare regex for filter .so.
	static const boost::regex rx(".*[\\.]so$");
 
 
       // suite du code coupé
}

Donc mes questions :

1. Est-ce que je dois remplacer la ligne que je veux tester par T::opendir et modifier l'import pour importer une autres classes ? (Si oui laquelle).

2. Je comprends pas trop cette déclaration au niveau du prototype, pour moi le prototype est le commentaire en dessus, alors que dans les exemples il ne déclare que le type de l'attribut.

Code :
1
2
3
4
5
6
7
// Prototype: DIR * opendir (const char *dirname)
CXXTEST_MOCK_GLOBAL(
DIR*,                                // Return type.
opendir,                             // Name of the function.
(const char* dirname),        // Prototype.
(dirname)                          // Argument list.
);
Merci de votre aide, je pense que j'ai beaucoup d'erreurs, et du coup ça devient difficile de m'en sortir seul.

p.s. des sources un peu plus complète que la doc officiels sont bienvenus.
manticore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 14h40   #2
gbdivers
Responsable C++

 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 5 314
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 37
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 5 314
Points : 19 509
Points : 19 509
Bonjour

Je connais pas trop cxxTest, ma réponse correspond à ce que j'ai compris de la doc

1. Oui, dans PlgLoader:lgLoader, tu dois appeler T::opendir et ajouter l'include #include <dirent_mock.h>

2. Pas trop compris ta question. La partie commentée est la signature de la fonction, la macro permet de déclarer une fonction T::opendir qui a la même signature (et qui fait probablement d'autres choses en interne)

Pas recherché d'autres sources d'information que la doc officielle

Bon courage
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP.

Ma page personnelle avec la liste de mes articles - Mon blog sur le C++, Qt et les GPU.

Je suis régulièrement sur le chat pour les questions C++/Qt.

Apprendre Qt 5 : vidéos d'installation (YouTube), extraites du livre Créer des applications avec Qt 5.
gbdivers est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 18h57   #3
manticore
Membre éclairé
 
Marc
Ingénieur sécurité
Inscription : novembre 2009
Messages : 282
Détails du profil
Informations personnelles :
Nom : Marc
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur sécurité

Informations forums :
Inscription : novembre 2009
Messages : 282
Points : 319
Points : 319
1. Ok, après plusieurs relecture j'en étais venu à la même conclusion que toi.

2. Ce que je comprends pas trop c'est le points suivant de la structure :

Code :
(const char* dirname),        // Prototype.
C'est quoi leur prototype, pour eclipse apparemment la signature est équivalente au prototype

Donc j'ai corrigé le code, mais ça ne marche toujours pas.
manticore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 19h07   #4
gbdivers
Responsable C++

 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 5 314
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 37
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 5 314
Points : 19 509
Points : 19 509
Dans la signature, tu as aussi le nom de la fonction et ses modificateurs
Pour l'erreur, faudra que je teste demain
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP.

Ma page personnelle avec la liste de mes articles - Mon blog sur le C++, Qt et les GPU.

Je suis régulièrement sur le chat pour les questions C++/Qt.

Apprendre Qt 5 : vidéos d'installation (YouTube), extraites du livre Créer des applications avec Qt 5.
gbdivers est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2013, 15h45   #5
manticore
Membre éclairé
 
Marc
Ingénieur sécurité
Inscription : novembre 2009
Messages : 282
Détails du profil
Informations personnelles :
Nom : Marc
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur sécurité

Informations forums :
Inscription : novembre 2009
Messages : 282
Points : 319
Points : 319
Après moult heures perdu pour rien, je vais migrer sur un autre environnement de test, celui-ci est tellement peu documenté, c'est la misère.
manticore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2013, 15h53   #6
Bousk
Modérateur
 
Homme Cyrille
Network programmer
Inscription : juin 2010
Messages : 1 543
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Network programmer

Informations forums :
Inscription : juin 2010
Messages : 1 543
Points : 4 084
Points : 4 084
Ici nous utilisons CPPUNIT.
Je n'ai pas eu grand mal à le prendre en main en me basant sur les exemples existants
Bousk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2013, 16h56   #7
manticore
Membre éclairé
 
Marc
Ingénieur sécurité
Inscription : novembre 2009
Messages : 282
Détails du profil
Informations personnelles :
Nom : Marc
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur sécurité

Informations forums :
Inscription : novembre 2009
Messages : 282
Points : 319
Points : 319
Merci, je vais migrer vers celui-ci.
manticore est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h49.


 
 
 
 
Partenaires

Hébergement Web