Wie erstellen Sie Tests für „make check“ mit GNU Autotools
-
02-07-2019 - |
Frage
Ich bin mit GNU Autotool für das Build-System an einem bestimmten Projekt. Ich möchte beginnen automatisierte Tests für verifcation zu schreiben. Ich möchte nur „make check“, um es diese automatisch ausgeführt. Mein Projekt ist in C ++, obwohl ich immer noch neugierig bin über automatisierte Tests zu schreiben als auch für andere Sprachen.
Ist das kompatibel mit so ziemlich jeder Einheit Test-Framework gibt (ich mit cppunit dachte)? Wie kann ich diese Einheit Test-Frameworks in Make-Check Haken? Kann ich sicher, dass ich den Rest des Projekts in der Lage sein werden, installiert das Gerät nicht Prüfsoftware erforderlich zu konfigurieren und bauen?
Lösung
Zur Testlauf, wenn Sie make check
ausgeben, müssen Sie sie auf die TESTS
Variable hinzuzufügen
Angenommen, Sie haben bereits die ausführbare Datei erstellt, die die Unit-Tests läuft, müssen Sie nur den Namen der ausführbaren Datei, um die Tests Variable wie folgt hinzu:
TESTS=my-test-executable
Es sollte dann automatisch ausgeführt, wenn Sie make check
, und wenn die ausführbare Datei einen Wert ungleich Null zurückkehrt, wird er berichten, dass als Testfehler. Wenn Sie mehr Unit-Test-Executables haben, nur sie alle aufzuzählen in der TESTS
Variable:
TESTS=my-first-test my-second-test my-third-test
und sie werden alle bekommen laufen.
Andere Tipps
Ich bin mit überprüfen 0.9.10
configure.ac
Makefile.am
src/Makefile.am
src/foo.c
tests/check_foo.c
tests/Makefile.am
-
./configure.ac
PKG_CHECK_MODULES ([CHECK], [prüfen> = 0.9.10])
-
./tests/Makefile.am
für TestcodesTESTS = check_foo check_PROGRAMS = check_foo check_foo_SOURCES = check_foo.c $(top_builddir)/src/foo.h check_foo_CFLAGS = @CHECK_CFLAGS@
-
und schreiben Testcode,
./tests/check_foo.c
START_TEST (test_foo) { ck_assert( foo() == 0 ); ck_assert_int_eq( foo(), 0); } END_TEST /// And there are some tcase_xxx codes to run this test
Sie verwenden überprüfen Timeout verwenden und das Signal zu erhöhen. es ist sehr hilfreich.
Sie scheinen zwei Fragen im ersten Absatz zu fragen.
Die erste ist über Tests der GNU Autotools Toolchain Zugabe - aber diese Tests, wenn ich Sie richtig bin zu verstehen, sind sowohl für die Validierung, dass die Umgebung notwendig, um Ihre Anwendung zu erstellen vorhanden ist (abhängig Bibliotheken und Tools) sowie anpassen die Build für die Umwelt (plattformspezifische Unterschiede).
Die zweite ist über Unit-Testen Sie Ihre C ++ Anwendung und wo diese Tests aufzurufen, haben Sie so von der Autotools Werkzeugkette vorgeschlagen tun, vermutlich aus dem Configure-Skript. obwohl tun, dass nicht üblich ist - ein ‚Test‘ Ziel in Ihrem Makefile setzen eine konventionellere Weise Ihre Testsuite ausführen kann. Die typischen Schritte für den Aufbau und die Installation einer Anwendung mit Autotools (zumindest aus der Sicht des Benutzers, der nicht von der, den Entwickler, Perspektive) ist das configure-Skript laufen, dann laufen lassen, dann laufen optional Test machen und schließlich installieren zu machen.
Für das zweite Problem, nicht cppunit will, um eine Abhängigkeit zu sein, warum verteilen nicht nur mit Ihrer c ++ Anwendung? Können Sie setzen es gerade richtig in was auch immer Archivformat Sie verwenden (sei es tar.gz, tar.bz2 oder .zip) zusammen mit Ihrem Quellcode. Ich habe cppunit in der Vergangenheit verwendet und war zufrieden damit, verwenden JUnit und mit anderen xUnit Stil Frameworks.
Sie können die Automake ist TESTS
verwenden, um Programme mit check_PROGRAMS
erzeugt laufen aber davon aus, dass Sie ein Protokoll-Treiber und einen Compiler für die Ausgabe verwenden. Es ist wahrscheinlich einfacher, noch check_PROGRAMS
zu verwenden, aber die Testsuite mit einer lokalen Regel im Makefile aufzurufen:
check_PROGRAMS=testsuite
testsuite_SOURCES=...
testsuite_CFLAGS=...
testsuite_LDADD=...
check-local:
./testsuite