CUnit 2.1-0
cunit.sourceforge.net
Download bei Sourceforge
GNU Library or Lesser General Public License (LGPL)
2.1-0
24.04.2012
Mit CUnit lassen sich automatisierte Tests für C-Programme erstellen. Dabei können mehrere Tests in so genannten "Suiten"
zusammengefasst werden. Den "Suiten" lassen sich über init-Funktionen bestimmte Startbedingungen zuweisen, so ist gewährleistest,
dass die Tests immer unter den gleichen Bedingungen laufen.
CUnit ist ein schmales und übersichtliches Test-Framework. Dennoch bietet es alle nötigen Funktionen, um umfangreiche Test durchzuführen.
Erfahrene Nutzer können sich schnell in das Framework einarbeiten. Für unerfahrene Nutzer können die kurze Dokumentation und die nicht vorhandene
Nutzergemeinschaft zu Schwierigkeiten führen.
CUnit wird im Bereich der C-Entwicklung eingesetzt. Es ermöglicht die Erstellung von White-Box-Tests.
Standalone in der Konsole nutzbar und wird nativ von Netbeans unterstützt.
Für die Installation unter Windows mit MinGW werden bereits vorkompilierte Dateien bereitgestellt. Aus dem heruntergeladenen Archiv müssen die
Ordner bin, include und lib in den MinGW Ordner kopiert werden.
Alternativ lässt sich CUnit für andere Compiler oder Betriebssystem selber kompilieren. Dazu wird
ftjam benötigt. Hierzu muss die Jamrules.in in Jamrules umbenannt werden.
Danach ist CUnit mittels "jam -f Jambase install" kompilierbar. Die kompilierten Dateien müssen wieder zu MinGW bzw. dem jeweiligen Compiler
hinzugefügt werden.
CUnit bietet auf seiner Projektseite eine englischsprachige Dokumentation an. Die
Dokumentation ist klar durchstrukturiert und übersichtlich. In sechs kurzen Kapiteln werden die wichtigsten Punkte von CUnit beschrieben.
Neben der Dokumentation befindet sich ebenfalls auf der Seite eine Doxygen Dokumentation.
Ein einführendes Beispiel lässt sich direkt auf der Seite finden.
Die Projektseite ist sehr kurz gehalten. Neben der Dokumentation finden sich ein Code-Beispiel, Screenshots und Kontaktinformationen
auf der Seite. Anscheinend wurde die Dokumentation zum letzten Mal im Jahr 2005 aktualisiert, als die Version 2.0 erschienen ist.
Dies entspricht in etwa dem letzten großen Update des Frameworks.
Auf der Sourceforge Projektseite finden sich zwei Foren und zwei Mailinglisten.
Weder die Foren noch die Mailinglisten werden aktiv betreut und genutzt. Um eine Anfrage zu stellen ist eine Registrierung erforderlich,
zum Lesen ist keine Registrierung erforderlich. Die meisten Support-Anfragen bleiben dort unbeantwortet. Weiterhin sind auf der
CUnit Projektseite E-Mail Adressen vorhanden.
CUnit lässt sich einfach verwenden. Neue Testfälle lassen sich einfach erstellen, in dem die Test-Funktionen geschrieben werden, ggf.
init- und cleanup-Funktionen für die Test-Pakete (suites). Anschließend muss die Testumgebung initialisiert werden. Die Test-Pakete
werden der Testumgebung hinzugefügt. Die einzelnen Testfälle werden ihren passenden Test-Paketen zugewiesen. Als nächstes müssen die Testfälle
gestartet werden. Abschließend muss die Testumgebung bereinigt werden.
Durch die verschiedenen Test-Pakete (suites) lassen sich die Test organisieren und automatisiert ablaufen. Nach dem Starten der Tests ist kein
weiterer Eingriff nötig.
CUnit Standalone
Anhand von zwei kleinen Funktionen soll die Funktionsweise von CUnit erklärt werden. Die Funktion sumValues() addiert zwei übergebene int-Werte und die
Funktion returnChar() gibt einen übergebenen Char direkt wieder zurück.
Dateien:
int sumValues(int a, int b) {
return a+b;
}
char* returnChar(char *str) {
return str;
}
In CUnit können verschiedene Suiten angelegt werden, in den unterschiedlichen Suiten können einzelne Testfälle getestet werden. Damit gewährleistet
ist, dass die Test immer zu gleichen Bedingungen ausgeführt werden bietet CUnit sogenannte init und clean Funktionen. Die init-Funktion wird
vor jedem Test aufgerufen, die clean-Funktion nach jedem Test. In diesem Beispiel werden beide Funktionen nicht verwendet. In der Praxis könnten
hier z.B. Variablen initialisiert werden oder Dateien ausgelesen werden.
int init_sumValuesSuite(void) {
return 0;
}
int clean_sumValuesSuite(void) {
return 0;
}
Für die einzelnen Testfälle werden jeweils eigene Funktionen geschrieben. In jeder Test-Funktion wird nur ein Testfall getestet. Bei den
Test-Funktionen handelt es sich um einfache void-Funktionen. CU_ASSERT_TRUE(Bedingung) erwartet, dass die Bedingung true (ungleich 0) ist,
wohingegen CU_ASSERT_FALSE(Bedingung) false (0) erwartet. Weitere vordefinierte Annahmen finden sich in der
CUnit Dokumentation.
void test_sumValues(void) {
CU_ASSERT_TRUE(sumValues(4,3) == 7);
CU_ASSERT_FALSE(sumValues(4,3) == 8);
}
Nun muss noch die Testsuite erstellt werden. Dazu wird das Testframework mit CU_initialize_registry() initialisiert. Mit
CU_add_suite(Name, init-Funktion, clean-Funktion) können neue Suiten erstellt werden. Die einzelnen Testfälle können mit
CU_add_test(TestSuite,Name,Test-Funktion) den verschiedenen Testsuiten hinzugefügt werden. Dabei lässt sich die Zuordnung anhand der Reihenfolge
organisieren. Testfälle werden immer der zuletzt erstellten Testsuite hinzufügt. Sollen verschiedene Suiten benutzt werden so wird erst die
Testsuite erstellt und die zugehörigen Testfälle hinzugefügt, dann wird eine neue Testsuite erstellt und die zugehörigen Testfälle hinzufügt.
CU_basic_run_test() führt die Test aus und CU_cleanup_registry() beendet das Testframework.
int main() {
CU_pSuite suite;
CU_initialize_registry();
suite = CU_add_suite("sumValues Tests",init_sumValuesSuite,clean_sumValuesSuite);
CU_add_test(suite,"Sum Values", test_sumValues);
...
CU_basic_run_tests();
CU_cleanup_registry();
return 0;
}
Wird nun die kompilierte Datei aufgerufen zeigt CUnit an, ob alle Tests erfolgreich waren oder ob es zu Fehlern kam. Fehlgeschlagene Tests
werden direkt zu Beginn angezeigt. Zur Veranschaulichung schlägt in diesem Beispiel ein Test fehl. Die Bedingung x!=5 ist false, da
im Vorfeld x mit 5 initialisiert wurde.
CUnit mit NetBeans
NetBeans bietet von Haus aus eine Hilfe, um CUnit-Test zu erstellen. Es bietet neben einer halb-automischen Erstellung der Tests auch eine
Visualisierung des Ergebnises an.
Um neue Testfälle zu erstellen klickt, man rechts auf die jeweilige C-Datei und wählt "Create Test" --> "New CUnit Test..."
Im neu geöffneten Fenster wählt man die jeweiligen Funktionen aus, die getestet werden sollen.
Ggf. den Speicherort und den Namen angeben.
Netbeans hat nun ein Grundgerüst erstellt. Die leeren Test-Funktionen müssen noch mit Inhalt gefüllt werden.
void testSumValues() {
CU_ASSERT_TRUE(sumValues(4,3) == 7);
CU_ASSERT_FALSE(sumValues(4,3) == 8);
}
Jetzt können die Tests durchgeführt werden. Dies geschieht mit einem Rechtsklick auf CUnit Test und dann auf Test.
Im unteren Bereich zeigt Netbeans das Ergebnis an.
Eine detaillierte Beschreibung lässt sich in der CUnit Dokumentation finden.
Es findet sich ein Kapitel in [Köh07].
Zurück zur Werkzeugübersicht
Zurück zur CSI-Hauptseite