2017-03-28 1 views
0

Dans mon implémentation actuelle j'ai 2 fichiers (je suis coincé et ne pas obtenir plus loin)Design for situation suivante ayant gtest procédure

//firstFile.cpp 
class first 
{ 
    //some object of xyz class 
}; 

first f; //global 

TEST(Suite, Testcase 
{ 
//do something 
} 



//secondFile.cpp 
class second 
{ 
public: 
//some data members 

void function() 
} 

Tâche: - Je veux appeler Test (considérer une fonction spéciale, quand il est appelé, objet de premier (ie objet global défini sera créé.) Dans le test je veux enregistrer quelques données pour le dernier traitement, que évidemment je ne peux pas faire en première classe car il sera initialisé sur chaque appel de TEST.

Problème: - Je pensais avoir une classe distincte (dans un autre fichier .cpp) qui nécessitait la sauvegarde de la structure de données. Ata structure dans la procédure TEST et continuer à ajouter les données sur les données précédentes avec chaque appel TEST. Je ne peux pas avoir un objet pour la deuxième classe dans firstFile.cpp car il sera également créé/détruit à chaque appel.

Une suggestion? Aussi je ne peux rien faire à propos de la procédure TEST, c'est comme ça.

Répondre

1

In test, vous pouvez définir des appareils de test. C'est un peu comme définir un contexte pour un ensemble de tests. Cela vous donne des moyens pour régler les problèmes de SetUp/TearDown avant/après chacun de vos tests, mais aussi avant/après l'exécution de votre suite de tests. Notez que SetUp et TearDown sont sensibles à la casse.

struct MyFixture : testing::Test 
{ 
private: 
    // stuff 
protected: 
    //! Called before running all tests 
    static void SetUpTestCase(); 
    //! Called after running all tests 
    static void TearDownTestCase(); 

    //! Called before each test 
    void SetUp() {} 
    //! Called after each test 
    void TearDown() {} 

public: 
    static SomeSharedObject& GetSharedObjInTest() {} 
}; 

et dans le cas de test, vous devrez appeler

TEST_F(MyFixture, MyTest_Name) 
{ 
// some cool stuff here 
} 

Vous pouvez simplement créer une instance statique de first l'intérieur de cette fixation, l'initialiser à l'intérieur setUp() et utiliser un getter statique pour l'accès à l'intérieur de vos différents tests.

se référer à la documentation gtest - Sharing resources between tests in the same test case

+0

Si vous avez déjà développé beaucoup de routines de support à utiliser avec'Installation() 'et' TearDown() 'méthodes, ne sera pas la solution ci-dessus nécessitent ce qui les rend aussi statique afin d'utiliser ces fonctions? En effet, ce n'est pas une solution pratique IMO. Je n'arrive toujours pas à comprendre pourquoi GTest inclut les méthodes 'SetUp()' et 'TearDown()' qui reflètent les fonctionnalités de Constructor et Destructor. Dans un monde élégant, le Constructeur et le Destructeur auraient pu servir le but statique setUpTestCase() et le vide statique TearDownTestCase() en initialisant toutes les ressources communes à tous les cas de test. – Sampath