Qualitätssicherung für Embedded-Linux-Projekte Unit-Tests mit Open-Source-Werkzeugen

Unit-Tests mit Open-Source-Werkzeugen

Wie man sieht, ist die Defintion der Quellen und der Ziel-Datei einer Bibliothek genauso einfach wie bei einem Programm. Bis jetzt wurden nur ein Programm und eine Bibliothek unter test definiert. Wie bereits erwähnt, kann man die Tests in der Variable TESTS eines Makefile.am auflisten. Listing 2 zeigt das Makefile des Verzeichnisses tests/.

TESTS_ENVIRONMENT enthält das Kommando cd ‘pwd’, um in das entsprechende Verzeichnis auf dem Target zu gehen, bevor das eigentliche Executable ausgeführt wird. Die Testprograme sind unterteilt in Binär- Tests (hier die Variable: OUR_ BINARY_TESTS) und Skript-Tests (Variable: OUR_SCRIPT_TESTS). Das ist notwendig, um automake mitzuteilen, wie die erforderlichen Build- Regeln zu erzeugen sind. Diese Listen werden in den Variablen check_ PROGRAMS und check_SCRIPTS angegeben, um die Generierung der Regel check zu unterstützen. Im Fall von automake/autounit sind Tests in Testlisten eingeteilt, die in Makefile.am aufgelistet werden. Diese Programme können über vielfältige Testfall-Implementierungen verfügen, von denen jede einzelne in der Testumgebung ausgeführt wird.

TARGET_LOGIN=root@targetdev
TESTS_ENVIRONMENT=ssh $(TARGET_LOGIN) „cd ‘pwd’ ; „

OUR_SCRIPT_TESTS = test-test
OUR_BINARY_TESTS = test-functions test-static test-library

OUR_TESTS = $(OUR_SCRIPT_TESTS) $(OUR_BINARY_TESTS)

TESTS = $(OUR_TESTS)

check_PROGRAMS = $(OUR_BINARY_TESTS)

test_functions_SOURCES = test-functions.c
test_functions_LDADD = ../src/hello.o
test_functions_LDFLAGS = -lau-c-unit $(GLIB_LIBS)
test_functions_CFLAGS = $(GLIB_CFLAGS)

test_static_SOURCES = test-static.c
test_static_LDFLAGS = -lau-c-unit $(GLIB_LIBS)
test_static_CFLAGS = $(GLIB_CFLAGS)

test_library_SOURCES = test-library.c
test_library_LDADD = ../lib/libhellotest.la
test_library_LDFLAGS = -lau-c-unit $(GLIB_LIBS)
test_library_CFLAGS = $(GLIB_CFLAGS) -I../lib/

check_SCRIPTS = $(OUR_SCRIPT_TESTS)
noinst_SCRIPTS = $(OUR_SCRIPT_TESTS)
EXTRA_DIST = $(OUR_SCRIPT_TESTS)

Listing 2. Das Makefile.am im Verzeichnis /tests teilt sich in Abschnitte für Funktions-Tests, Library-Tests und Tests der statischen C-Funktionen.

  • Funktions-Tests

Zum Test von Funktionen, die global sind in Bezug auf ein Objekt („nichtstatisch“), kann der Test-Code mit dem Objekt aus dem eigentlichen Quell- Verzeichnis (siehe Makefile.am) mit einigen Funktionen gebunden werden (siehe Listing 3). Wie man hier sieht, können mehrere Tests in einer Gruppe spezifiziert werden und zusammen in einer initialisierten Testsuite ablaufen. Hierbei referenziert das Präfix au_ auf autounit. In obigem Beispiel können die beiden letzten Argumente von au_new_suite() einfach auf „0“ gesetzt werden. Ansonsten wirken sie als Funktionszeiger für Code, die vor bzw. nach jedem Test Function Call aufgerufen werden sollen. Hier ist der kurze Setup-Code in den Testfunktionen enthalten. Innerhalb der jeweiligen Tests können diverse Bedingungen definiert werden, die an der entsprechenden Stelle im Code erfüllt sein müssen. Andernfalls wird der gesamte Test als FAILED gewertet. Die Resultate aller Tests werden zusammengefasst und zum Schluss angezeigt, wie später gezeigt wird.