2014-06-26 14 views
6

Mam klasy, która dziedziczy z innej klasy tak:Jak używać dziedziczenia dla klasy z TEST_CLASS w CppUnitTestFramework

class TestClass : public BaseClass 

Zastanawiam się, czy jest możliwe, aby ta klasa testy przy użyciu TEST_CLASS makro lub inne makro, które jest częścią Microsoft Unit Testing Framework for C++. Próbowałem:

class TEST_CLASS(TestClass : public BaseClass) 

Ale IDE daje błąd 'Error: oczekuje zarówno definicję lub nazwę znacznika' i błąd kompilatora jest error C3861: '__GetTestClassInfo': identyfikator Nie znaleziono

wiem, to chyba złe praktyki do dziedziczenia w klasie testowej, ale to by Stosowanie testu łatwiejsze. Jestem stosunkowo nowy w C++, więc zastanawiam się, czy jest to coś prostego, co przeoczyłem, czy jest to po prostu niemożliwe.

Dzięki,

Odpowiedz

7

Jest jeszcze jedna opcja, że ​​nie należą, a inni mogą być potknięcia to pytanie nie znając rozwiązanie.

Można rzeczywiście wywodzą się z dowolnym rodzaju patrząc na makro samego:

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

jak C++ obsługuje wielokrotne dziedziczenie można łatwo wyprowadzić za pomocą kodu podobnego do poniższego:

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

TEST_CLASS(MyTestClass), public ParentClass 
{ 
}; 

Pamiętaj tylko, że jeśli pracujesz z zasobami, musisz mieć wirtualny destruktor, aby go wywołać. Trzeba będzie również zadzwonić do initialize & metod oczyszczania bezpośrednio, jeśli będzie ich użyciem, ponieważ tworzą one statyczne metody nie są nazywane automagicznie.

Powodzenia, Good testowania!

0

Minęło trochę czasu odkąd wykorzystywane CppUnitTestFramework ale wtedy this site jest cennym źródłem dla wielu pytań dotyczących tego tematu.

TEST_CLASS jest preprocessor macro. Możesz go użyć do zadeklarowania klasy testowej, takiej jak

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

To wszystko. O ile mi wiadomo, nie ma możliwości dziedziczenia klas testowych od siebie.

Być może chociaż composition over inheritance może pomóc w konkretnym przypadku.

+0

Dzięki TobiMcNamobi. W tym przypadku kompozycja nie jest możliwa z powodu klasy testu iterującego metody klasy. Być może będę musiał zmienić ramy testowania, aby to działało poprawnie. –

Powiązane problemy