TestSuite
-
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...