2014-06-26 9 views
6

Ho una classe che eredita da un'altra classe in questo modo:Come usare l'ereditarietà per una classe con TEST_CLASS in CppUnitTestFramework

class TestClass : public BaseClass 

Mi chiedo se è possibile per rendere questo una classe di test utilizzando la TEST_CLASS macro o qualche altra macro che fa parte di Microsoft Unit Testing Framework per C++. Ho provato:

class TEST_CLASS(TestClass : public BaseClass) 

Ma l'IDE dà l'errore 'Errore: atteso sia una definizione o di un nome di tag' e l'errore del compilatore è errore C3861: '__GetTestClassInfo': identificatore non trovato

So che probabilmente è una cattiva pratica ereditare da una classe di test, ma renderebbe più semplice l'implementazione del test. Sono relativamente nuovo al C++ quindi mi chiedo se è qualcosa di semplice che mi è mancato o che non è possibile.

Grazie,

risposta

7

C'è un'altra opzione che non hai incluso e altri potrebbero inciampare su questa domanda senza conoscere la soluzione.

Si può effettivamente derivare da qualsiasi tipo arbitrario, cercando in macro stessa:

/////////////////////////////////////////////////////////////////////////////////////////// 
// Macro to define your test class. 
// Note that you can only define your test class at namespace scope, 
// otherwise the compiler will raise an error. 
#define TEST_CLASS(className) \ 
ONLY_USED_AT_NAMESPACE_SCOPE class className : public ::Microsoft::VisualStudio::CppUnitTestFramework::TestClass<className> 

come C++ supporta l'ereditarietà multipla si può facilmente ricavare utilizzando il codice simile al seguente:

class ParentClass 
{ 
public: 
    ParentClass(); 
    virtual ~ParentClass(); 
}; 

TEST_CLASS(MyTestClass), public ParentClass 
{ 
}; 

Ricorda che se stai lavorando con le risorse avrai bisogno di avere un distruttore virtuale per chiamarlo. Dovrai anche chiamare i metodi di pulizia di inizializzazione & direttamente se li stai usando, perché i metodi statici che creano non vengono chiamati automaticamente.

Buona fortuna, buona prova!

0

E 'stato un po' che ho usato CppUnitTestFramework ma allora this site è stata una risorsa preziosa per molte domande su questo argomento.

TEST_CLASS è preprocessor macro. Puoi usarlo per dichiarare una classe di test come

TEST_CLASS(className) 
{ 
    TEST_METHOD(methodName) 
    { 
     // test method body 
    } 
    // and so on 
} 

Questo è tutto. Per quanto ne so, non c'è modo di ereditare le classi di test l'una dall'altra.

Forse sebbene composition over inheritance potrebbe aiutare nel caso specifico.

+0

Grazie TobiMcNamobi. La composizione non è possibile in questo caso a causa della classe del test che itera i metodi della classe. Potrei dover cambiare i framework di test per farlo funzionare correttamente. –

Problemi correlati