2014-06-26 9 views
6

Ich habe eine Klasse bekommt, die wie so von einer anderen Klasse erbt:Wie mit TEST_CLASS in CppUnitTestFramework Erbe für eine Klasse verwenden

class TestClass : public BaseClass 

Ich frage mich, ob es möglich ist, das dies eine Testklasse zu machen mit TEST_CLASS Makro oder ein anderes Makro, das Teil des Microsoft Unit Testing Framework für C++ ist. Ich habe versucht:

class TEST_CLASS(TestClass : public BaseClass) 

Aber der IDE gibt den Fehler 'Fehler: erwartet entweder eine Definition oder einen Tag-Namen' und der Compiler-Fehler ist Fehler C3861: '__GetTestClassInfo': Bezeichner nicht

gefunden

Ich weiß, es ist wahrscheinlich eine schlechte Methode, in einer Testklasse zu erben, aber es würde die Implementierung des Tests erleichtern. Ich bin relativ neu in C++, also frage ich mich, ob es etwas einfaches ist, das ich verpasst habe oder wenn es einfach nicht möglich ist.

Danke,

Antwort

7

Es gibt eine andere Option, die Sie nicht einbezogen haben und andere könnten über diese Frage stolpern, ohne die Lösung zu kennen.

Sie können ableiten tatsächlich von jedem beliebigen Typ von auf der Makro-Suche selbst:

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

Als C++ unterstützt Mehrfachvererbung Sie mithilfe von Code ähnlich dem folgenden leicht ableiten können:

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

TEST_CLASS(MyTestClass), public ParentClass 
{ 
}; 

Denken Sie daran, dass Sie, wenn Sie mit Ressourcen arbeiten, einen virtuellen Destruktor benötigen, um ihn aufrufen zu können. Sie müssen auch die Bereinigungsmethoden & initialisieren, wenn Sie sie verwenden, da die von ihnen erstellten statischen Methoden nicht automatisch aufgerufen werden.

Viel Glück, gute Prüfung!

0

Es ist eine Weile her, seit ich CppUnitTestFramework verwendet, aber damals hat this site zu diesem Thema eine wertvolle Ressource für viele Fragen gewesen.

TEST_CLASS ist preprocessor macro. Sie können es verwenden, um eine Testklasse wie

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

zu deklarieren. Das ist es. Soweit ich weiß, gibt es keine Möglichkeit, Testklassen voneinander zu erben.

Vielleicht obwohl composition over inheritance könnte in Ihrem speziellen Fall helfen.

+0

Danke TobiMcNamobi. Eine Zusammensetzung ist in diesem Fall aufgrund der Klasse des Tests, die die Methoden der Klasse iteriert, nicht möglich. Möglicherweise muss ich Test-Frameworks ändern, damit dies richtig funktioniert. –