Antwort
 
Themen-Optionen
Alt 07.04.2007, 12:14 Nach oben    #1
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard [C++] Entwurfsproblem: Tests

Bei meinem aktuellen Problem geht es um das Entwerfen eines Test-Frameworks. Bevor jetzt die Antwort kommt: Nimm doch XYZ. Ja, ich kenne cppunit und Konsorten. Aber die passen einfach nicht.

Zunächst zwei grundsätzliche Sachen. Als erstes gibt es Testfälle (class TestCase). Diese verfügen relativ banal über eine Test-Methode. Die Test-Methode wirft entweder Exceptions (=Test fehlgeschlagen) oder nicht (=Test erfolgreich). So gibt es beispielsweise Makros, die dann das ganze übernehmen. Beispiel:

Code:
class MyTest : public TestCase
{
public:
  void Test()
  {
      TEST_ASSERT(2 == 2, "2 ist nicht gleich 2!");
  }
};
Testfälle lassen sich auch in Gruppen zusammenschliessen, wobei eine Testgruppe immer auch einen Testfall darstellt. Beispiel:

Code:
Testgroup group1;
group1.addTest(test1);
group1.addTest(test2);
Testgroup group2;
group1.addTest(group2);
group2.addTest(test3);
// usw.
Soweit so gut. Nun zu meinem eigentlichen Problem. Ich lasse die Testfälle teilweise aufeinander aufbauen. Der Login ist ein gutes Beispiel. Die Testfälle sollen gegen einen Server laufen. Dabei macht Test 1 einen Login. Test 2 baut darauf auf und macht dann etwas auf dem Server, was nur klappt, wenn der Login geklappt hat.

Eine Lösung wäre, den gesamten Test abzubrechen, sobald der erste (Login) schief läuft. Also Exceptions einfach Exceptions sein lassen... Das kann extrem nervig werden, wenn man ein großes Testpaket hat, bei dem vielleicht 10 weitere Tests nicht vom Login abhängen aber wegen etwas anderem fehlschlagen würden. Daher war meine Idee, die testgruppe dahingehend zu erweitern, dass sie weiss, wie sie bei einem Problem verfahren soll. Beispiel:
Code:
Testgroup group1;
group1.addTest(loginTest, TestGroup::GROUP_FAILURE);
group1.addTest(test1, TestGroup::GROUP_FAILURE);
group1.addTest(test2, TestGroup::STANDALONE);
group1.addTest(test3, TestGroup::STANDALONE);
group1.addTest(test4, TestGroup::STANDALONE);
// usw.
Wenn testlogin oder test1 fehlschlagen würde nicht weitergemacht. Wenn test2 bis test 4 fehlschalgen, wird trotzdem weitergemacht, in der Hoffnung, dass folgende Tests nicht fehlschlagen.

Mein Problem ist, dass die Exceptions nun nicht einfach weitergereicht werden dürfen. Es kann ja sein, dass noch weitere Tests aufgerufen werden können. Andererseits kann es sein, dass nun test2 und test 3 fehlschlagen, ich also zwei Fehler/Exceptions habe. Und zu allem Überfluss muss derjenige, der den Test ausführt irgendwie wissen, woher der Fehler oder die Exception kommt (das wäre das kleinere übel, man kann ja this mit in die Exception stopfen, dann weiss man wo der Fehler ist).
Meine aktuelle Lösung ist, ein Callback-Objekt mit an die Testmethode zu übergeben. Das soll dann immer sofort benachrichtigt werden, wenn ein einzelner Test fehlschlägt oder erfolgreich war. Das Widerspricht aber wieder etwas der Definition, dass auch die Testgruppen nach Möglichkeit eine Exception werfen sollten wenn sie fehlschlagen (= mindestens einer der Kinder fehlschlägt).

Das gefällt mir alles so nicht, auch wenn es geht. Hat irgendwer einen Schubser für mich in die richtige Richtung?
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.04.2007, 13:34 Nach oben    #2
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Ich kann kaum c++, aber ich würde in Testfällen die Exceptionnachrichten loggen/ausgeben und danach "fressen".
In Java ist das klassische try/catch. Im Catch die Exception loggen aber nicht werfen und dadurch kann der Test dann weiterlaufen.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.04.2007, 13:47 Nach oben    #3
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Prinzipiell ist das wie in java und in PHP mit den Exceptions
Soweit so gut, aber wenn ich das grafisch visualisieren will und nicht nur loggen?
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.04.2007, 13:59 Nach oben    #4
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 298
Standard

Du kannst die Fehlermeldungen ja in einem Array oder Struct (oder was es in C++ halt gibt) zwischenspeichern und am Schluss in einer Schleife alle ausgeben
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination.
Bleistift ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.04.2007, 15:42 Nach oben    #5
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Zitat:
Du kannst die Fehlermeldungen ja in einem Array oder Struct (oder was es in C++ halt gibt) zwischenspeichern und am Schluss in einer Schleife alle ausgeben
So arbeitet CruiseControl, welches wir auf Arbeit nutzen. Ich kann dir ja nach Ostern mal ein Beispiel der Fehlerausgaben geben, die bei fehlschlagenden Tests auftauchen...
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] PHPUnit oder testgetriebene Entwicklung mepeisen Tutorials 1 06.12.2007 10:56
"Event Recorder" zum Automatisieren von Tests Orolhawion Sonstige Programmiersprachen 17 02.10.2007 14:45
FCKEditor-PlugIn: Bitte um Tests Basti JavaScript und AJAX 5 28.06.2007 14:13
Entwurfsproblem: Aus Widgets in Datenbank schreiben? Basti PHP-Programmierung 3 29.03.2007 13:13
Frage zu Unit Tests björn PHP-Programmierung 13 18.08.2006 00:42


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:53 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44