From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- Bachelor/Softwaretechnik2/mixer/TestCase.h | 241 +++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 Bachelor/Softwaretechnik2/mixer/TestCase.h (limited to 'Bachelor/Softwaretechnik2/mixer/TestCase.h') diff --git a/Bachelor/Softwaretechnik2/mixer/TestCase.h b/Bachelor/Softwaretechnik2/mixer/TestCase.h new file mode 100644 index 0000000..c4eaca9 --- /dev/null +++ b/Bachelor/Softwaretechnik2/mixer/TestCase.h @@ -0,0 +1,241 @@ +#ifndef _TESTCASE__H +#define _TESTCASE__H + +#include //!< Container ür Funktionszeiger + +#include "Test.h" + +class TestCase; //!< Vorwärtsdeklaration für typedef + +typedef void (TestCase::*TESTFUNC)(); //!< Definition Testfunktion + +/** + * TestCase. + * Wird zum Gebrauch abgeleitet. + * + * Beispiel einer Testklasse. + * Wird von TestCase abgeleitet + * \code + * class TestCase : public Test + * { + * ... + * \endcode + * Weitere Schritte: Testfunktionen schreiben und + * beispielsweise im Konstruktur hinzufügen. + * @see Dokumentation TestCase::TestCase() + * @author Prof. Ralf Mayer + * @version 28.05.2005 + */ +class TestCase : public Test +{ +public: + /** + * Konstruktor. + * Anleitung zum Gebrauch: Klasse ableiten, dann Konstruktor + * geeignet überschreiben: + * \code + * MyTestCase( char* name = 0 ) : TestCase( name ) + * { + * addTest( (TESTFUNC) &MyTestCase::test1 ); + * addTest( (TESTFUNC) &MyTestCase::test2 ); + * // alle weiteren Tests hinzufügen + * // ... + * } // Ende Konstruktor + * \endcode + * @param name [optional] char* Name der Testklasse + */ + TestCase( char* name = 0); + + //! Destruktor + virtual ~TestCase() {} + + /** + * Ausführen aller Tests in der Testklasse. + * Sobald ein Fehler auftritt, wird dieser ausgegeben und + * der Einzeltest, also die einzelne Testfunktion beendet. + */ + virtual void run(); + + /** + * Setup Methode. + * Sollte immer von abgeleiter Testklasse überschreiben werden. + * Wird zu Beginn jedes Tests aufgerufen, also zu Begin von run() + */ + virtual void setUp() {} + + /** + * Teardown Methode zum Aufräumen nach jedem Test. + * Sollte immer von abgeleiter Testklasse überschreiben werden. + * Wird am Ende jedes Tests aufgerufen, also zu Begin von run() + */ + virtual void tearDown() {} + + /** + * Hinzufügen von Testfunktionen in der Testklasse. + * Bester Ort für diese Aufrufe ist der Konstruktor + * der abgeleiteten Klasse, d.h. der Testklasse + * + * Bei Zeigern auf Elementfunktionen in C++ sind Besonderheiten + * zu beachen. Rufen Sie diese Funktion stets in der folgenden + * Form auf, wenn z.B. die Funktion test1 heisst, + * und ihre Klasse MyTestCase: + * \code + * addTest( (TESTFUNC) &MyTestCase::test1 ); + * \endcode + * Eine Testfunktion sollte immer wie folgt aufgebaut werden: + * \code + * void meinTest3() + * { + * tN = "meinTest3"; // Hier Name der Testfunktion + * + * // Hier wird der Test vorbereitet, z.B + * float istWert = -2.5; // z.B. Ergebnis einer Berechnung + * float erwartet = 2.5; // Bekanntes, d.h. erwartetes Ergebnis + * + * // Hier wird Ergebnis und Erwartungswert verglichen. + * // Compiler schreibt in tL die aktuelle Zeilennummer (__LINE__) + * tL= __LINE__; assertEquals( istWert, erwartet ); + * // sind beide Werte gleich, dann ist's o.k. + * // wenn nicht wird Fehler mit Zeilennummer, + * // Namen der Testklasse und dem Funktionsnamen + * // angezeigt und dokumentiert. + * } + * + * \endcode + * Die Signatur einer Testfunktion darf nicht verändert werden + * \code void meineTestfunktion() \endcode + * @param f TESTFUNC + * @todo Dokumentation hinzufügen + */ + void addTest( TESTFUNC f ); + + // all assertions + /** + * Vergleichsfunktion. Falls a != b wird Ausnahme + * geworfen und als Fehler dokumentiert. + * @exception string. Enthält Fehler sowie Soll- und Ist-Wert + * @param a int Soll(erwarteter) Wert + * @param b int Ist, d.h Ergebniswert des Tests + * @return void + */ + void assertEquals( int a, int b); + + /** + * Vergleichsfunktion. Falls a != b wird Ausnahme + * geworfen und als Fehler dokumentiert. + * @exception string. Enthält Fehler sowie Soll- und Ist-Wert + * @param a long Soll(erwarteter) Wert + * @param b long Ist, d.h Ergebniswert des Tests + * @return void + */ + void assertEquals( long a, long b); + + /** + * Vergleichsfunktion. Falls a != b wird Ausnahme + * geworfen und als Fehler dokumentiert. + * @exception string. Enthält Fehler sowie Soll- und Ist-Wert + * @param a float Soll(erwarteter) Wert + * @param b float Ist, d.h Ergebniswert des Tests + * @return void + */ + void assertEquals( float a, float b ); + + /** + * Vergleichsfunktion. Falls a != b wird Ausnahme + * geworfen und als Fehler dokumentiert. + * @exception string. Enthält Fehler sowie Soll- und Ist-Wert + * @param a double Soll(erwarteter) Wert + * @param b double Ist, d.h Ergebniswert des Tests + * @return void + */ + void assertEquals( double a, double b ); + + /** + * Vergleichsfunktion. Falls a und b nicht innerhalb der + * vorgegebenen Genauigkeitsgrenze übereinstimmen, wird Ausnahme + * geworfen und als Fehler dokumentiert. + * Beachten sie auch mögliche Rundungsfehler bei der Berechnung. + * @exception string. Enthält Fehler sowie Soll- und Ist-Wert und Grenze + * @param a double Soll(erwarteter) Wert + * @param b double Ist, d.h Ergebniswert des Tests + * @param e double >= 0 vorgegebene Genauigkeitsgrenze + * @return void + */ + void assertEquals( double a, double b, double e ); + + /** + * Vergleichsfunktion. Falls a != b wird Ausnahme + * geworfen und als Fehler dokumentiert. + * @exception string. Enthält Fehler sowie Soll- und Ist-Wert + * @param a bool Soll(erwarteter) Wert + * @param b bool Ist, d.h Ergebniswert des Tests + * @return void + */ + void assertEquals( bool a, bool b); + + /** + * Vergleichsfunktion für Zeiger!! Falls a != b wird Ausnahme + * geworfen und als Fehler dokumentiert. + * @exception string. Enthält Fehler sowie Soll- und Ist-Wert + * in hexadezimaler Darstellung + * @param a void* Soll(erwarteter) Wert als Zeiger + * @param b void* Istwert als Zeiger + * @return void + */ + void assertEquals( void* a, void* b ); + + /** + * Vergleichsfunktion nur für C-Strings! Falls a != b wird Ausnahme + * geworfen und als Fehler dokumentiert. + * @exception string. Enthält Fehler sowie Soll- und Ist-Wert, + * jeweils auf 48 Zeichen begrenzt. + * @param a char* Soll(erwarteter) Wert + * @param b char* Ist, d.h Ergebniswert des Tests + * @return void + */ + void assertEquals( char* a, char* b ); + + /** + * Vergleichsfunktion. Falls a != true (wahr) wird Ausnahme + * geworfen und als Fehler dokumentiert. + * Hier kann z.B. eine logische Abfrage übergeben werden. + * @exception string. Enthält Fehler sowie den übergebenen Wert + * @param a bool Soll(erwarteter) Wert + * @return void + */ + void assertTrue( bool a ); + + /** + * Vergleichsfunktion. Falls a != false (falsch) wird Ausnahme + * geworfen und als Fehler dokumentiert. + * Hier kann z.B. eine logische Abfrage übergeben werden. + * @exception string. Enthält Fehler sowie den übergebenen Wert + * @param a bool Soll(erwarteter) Wert + * @return void + */ + void assertFalse( bool a ); + + /** + * Wirft Meldung als Ausnahme. + * Kann besipielsweise benutzt werden um das Auslösen einer + * Exception zu überprüfen. + * @exception string. Enthält Meldung + * @param msg char* Meldung + * @return void + */ + void assertMessage( char* msg ); + +protected: + int testsRun; + int testsFailed; + int testsOK; + int tL; //!< Zeilen Nummer + char* tN; //!< Test Name + char tcName[32]; //!< Name des Test Case + + //! Container für Funktionszeiger + vector vecFkt; +}; + +// No Code behind this line! +#endif \ No newline at end of file -- cgit v1.2.3