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?

War es hilfreich?

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
  1. ./configure.ac

    PKG_CHECK_MODULES ([CHECK], [prüfen> = 0.9.10])

  2. ./tests/Makefile.am für Testcodes

    TESTS = check_foo
    check_PROGRAMS = check_foo
    check_foo_SOURCES = check_foo.c $(top_builddir)/src/foo.h
    check_foo_CFLAGS = @CHECK_CFLAGS@
    
  3. 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top