Es gibt CATCH, das Testing für C++ ermöglicht. Es gibt einen Blogeintrag, der den Einsatz von CATCH auf hohem Niveau beschreibt. Zum Starten ist das Tutorial sehr gut.
#define CATCH_CONFIG_MAIN // This tells Catch to provide a main() - only do this in one cpp file #include "catch.hpp" unsigned int Factorial( unsigned int number ) { return number <= 1 ? number : Factorial(number-1)*number; } TEST_CASE( "Factorials are computed", "[factorial]" ) { REQUIRE( Factorial(1) == 1 ); REQUIRE( Factorial(2) == 2 ); REQUIRE( Factorial(3) == 6 ); REQUIRE( Factorial(10) == 3628800 ); }
Catch innerhalb eines Files einbauen und ausführen
1. Catch als Header in File einbinden
#define CATCH_CONFIG_RUNNER #include "catch.hpp"
2. Funktion, die getetst werden will
double calculate(string calculation) { double result = 0.0; ts.set(calculation); result = expression(); return result; }
3. Testfälle aufstellen
TEST_CASE( "r", "[digit]" ) { REQUIRE(calculate("4") == 4); REQUIRE(calculate("6") == 6); REQUIRE(calculate("4+2") == 6); REQUIRE(calculate("4+2+2") == 8); REQUIRE(calculate("4+2+2+4+2+2+1") == 17); REQUIRE(calculate("4-2") == 2); REQUIRE(calculate("8-2") == 6); REQUIRE(calculate("8-2-2") == 4); REQUIRE(calculate("3*2") == 6); REQUIRE(calculate("3*3") == 9); REQUIRE(calculate("3*2*3") == 18); REQUIRE(calculate("3+2*4") == 11); REQUIRE(calculate("3*2+4") == 10); REQUIRE(calculate("4 + 2") == 6); REQUIRE(calculate("10 + 2") == 12); REQUIRE(calculate("10 + 123") == 133); REQUIRE(calculate("-4 + 5") == 1); REQUIRE(calculate("-100 + 5") == -95); REQUIRE(calculate("(4 + 5)*2") == 18); REQUIRE(calculate("3+(-4 * 5)") == -17); REQUIRE(calculate("1.5 * 2") == 3); }
Am Ende des Files folgend die Testfälle.
4. Datei kompilieren
5. Ausführen über Konsole und Argumente mitgeben
Gibt man keine Argumente mit, werden alle Tests durchgelauften.
Struktur der Testfälle
REQUIRE(calculate("6") == 6);
Nach REQUIRE schreibt man die Funktion, die aufgerufen werden soll und gibt ihr die notwendigen Werte mit.
Nach dem == folgt das zu erwartende Ergebnis.