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

Test-Setup am Beispiel

Nachfolgend wird ein Beispiel etwas detaillierter vorgestellt. Das Paket (hellotest-XX.XX.tar.gz) kann von der Website www.philosys.de/news/ heruntergeladen werden. Es ist ein reguläres Paket im GNU-Stil und kann – außer der Notwendigkeit, einen Cross-Compiler auf dem eigenen Entwicklungs- Host aufzusetzen – so genutzt werden, wie es ist (siehe auch die Datei „Readme“.)

Das Makefile.am im Hauptverzeichnis des Pakets besteht aus den Zeilen

SUBDIRS = src lib tests
test: check

Der Test-Code (/tests directory) ist getrennt vom eigentlichen Code (/src und /lib). Normalerweise ist check das von den GNU autotools bereitgestellte Target. Bequemerweise kann test als ein Alias definiert werden. Den Inhalt der configure. ac zeigt Listing 1. Die meisten Code-Zeilen in configure.ac sorgen dafür, dass alles an seinem richtigen Platz ist. Diese Information wird später in Makefiles genutzt, um die entsprechenden Header-Dateien, abhängige Bibliotheken und weiteres zu finden. Die letzte Definition von AC_ OUTPUT spezifiziert, welche Makefiles erzeugt werden sollen. Der Inhalt dieser Makefiles ist recht simpel. Der Makefile.am im Verzeichnis /src lautet:

bin_PROGRAMS = hellotest
hellotest_SOURCES = hello.c main.c
noinst_HEADERS = hello.h

Und lib/Makefile.am:

lib_LTLIBRARIES = libhellotest.la
libhellotest_la_SOURCES = hellotest.c
include_HEADERS = hellotest.h

AC_PREREQ(2.59e)
AC_INIT(hellotest, 1.0, stigge@philosys.de)
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([src/main.c])
AC_CONFIG_HEADER([config.h])

# Checks for programs.
AC_PROG_CC
AC_PROG_LIBTOOL

# Checks for libraries.
AM_PATH_GLIB

# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([fcntl.h stdlib.h string.h termios.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_TIME

AC_MSG_CHECKING(to see if we can add ‘-Wall -W’ to CFLAGS)
if test x$GCC != x ; then
CFLAGS=“$CFLAGS -D_U_=\“__attribute__((unused))\“ -Wall -W -D_GNU_SOURCE“
AC_MSG_RESULT(yes)

else

CFLAGS=“-D_U_=\“\“ $CFLAGS“
AC_MSG_RESULT(no)

fi

# Checks for library functions.
AC_FUNC_SELECT_ARGTYPES
AC_CHECK_FUNCS([memset select strstr])

AC_OUTPUT([Makefile
src/Makefile
lib/Makefile
tests/Makefile])

Listing 1. Die meisten Code-Zeilen der Datei configure.ac listen auf, welches Element in welchem Verzeichnis zu finden ist. Am Ende spezifiziert die Definition von AC_OUTPUT, welche Makefiles erzeugt werden sollen.