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.