TestSuite
-
hallo,
ich möchte gerne eine TestSuite erstellen.
Da meine Tests in diversen Unterverzeichnissen sind hätte ich gern, dass sich meine Tests in einer gemeinsamen Datenstruktur "registrieren".
Alle Tests erben von einer gleichen Klasse.Gibts eine Möglichkeit, das zu realisieren? dh: im File (Header/Src), wo mein Test definiert ist schreib ich irgendwo:
TestRegistry::getInstance()->add(new MyTest());oder so...
Dann würde ich einfach alle Tests durchlaufen und dort eine Interface Funktion der "Test" Klasse aufrufen...
Oder hat jmd. eine bessere Idee, wie man das machen könnte? (Nein, ich will nicht cppunit verwenden... - hab QT am Laufen und würd gerne mit QTest arbeiten)danke
-
ungern voreilig - aber da schon almost auf Seite 2

-> push <-
-
Ich bin nicht ganz sicher, aber vielleicht ist das Observer-Pattern das Richtige.
http://www.henkessoft.de/C++/C++ Fortgeschrittene/C++_Fortgeschrittene.htm#3.1._Observer
-
ja, das wär prinzipiell schon ok, nur mein problem ist eigentlich: wie krieg ich klassen, die ich nur zur compiletime kenne in einen vector/liste/whatever?
dh: gibts eine makro technik, wo ich in meine zu testende klasse ein kl. makro aufrufe und diese dann in die zentrale tests-liste reinkommt...danke
-
Da gibts verschiedene Möglichkeiten. Du könntest z.B. ein Interface Testable machen, und dann Deinen Vektor Testable-Objekte speichern lassen. Dann müssen allerdings alle Deine zu testenden Klassen Testable implementieren.
Sowas wie boost::any wäre auch eine Möglichkeit.
-
auch das ist klar.
aber:
// mytest.cpp class MyTest : public Something { // how to add MyTest to TestSuite::getInstance()->register(this); }; // somewhere.cpp class TestSuite { // Singleton static TestSuite *getInstance() { static TestSuite instance; return &instance; } void register(Something *test) { list.add(test); } };Eben genau um den
TestSuite::getInstance()->register(this);call gehts mir! Wo können sich meine Testklassen selbst bei der TestSuite registrieren? Die sind ja unbekannt und werden von niemandem aufgerufen...
-
Ist mir nur gerade aufgefallen:
registerist ein Schlüsselwort in C++ und darf nicht als Bezeichner verwendet werden.
-
Wenn Something Dein Testinterface sein sollte, dann könnte doch dessen Konstruktor Dich bei der Testsuite registrieren. Die ist ja ein Singleton.
-
LOL

stimmt - eigentlich heissts auch registerTest() oder so...
-
und ein letztes mal... *push*
-
Ja, register = auto
http://www.henkessoft.de/C++/Cpp_school/auto.htm
-
es geht a bissi um was anders...