22

Ich verwende GNU Autotools für das Build-System für ein bestimmtes Projekt. Ich möchte anfangen, automatisierte Tests für die Verifikation zu schreiben. Ich möchte einfach "make check" eingeben, damit diese automatisch ausgeführt werden. Mein Projekt ist in C++, obwohl ich immer noch neugierig bin, automatisierte Tests für andere Sprachen zu schreiben.Wie erstellen Sie Tests für "make check" mit GNU-Autotools

Ist das kompatibel mit so ziemlich jedem Unit Testing Framework (ich dachte an cppunit)? Wie hänge ich diese Unit-Test-Frameworks in make check ein? Kann ich sicherstellen, dass die Komponententestsoftware nicht installiert werden muss, um den Rest des Projekts konfigurieren und erstellen zu können?

Antwort

21

Um Testlauf, wenn Sie make check ausgeben, müssen Sie sie auf die TESTS Variable

hinzufügen Sie bereits die ausführbare Datei erstellt haben davon aus, dass die Unit-Tests läuft, müssen Sie nur den Namen der ausführbaren Datei addieren, TESTS Variable wie folgt aus:

TESTS=my-test-executable 

es sollte dann ausgeführt werden, automatisch, wenn Sie make check, und wenn die ausführbare Datei einen Wert ungleich Null zurückgibt, wird es, dass als ein Testfehler melden. Wenn Sie mehr Unit-Test-Executables haben, schreiben Sie sie einfach alle in dem TESTS Variable:

TESTS=my-first-test my-second-test my-third-test 

und sie werden alle laufen lassen.

+1

möchten Sie vielleicht auch die Variable TESTS_ENVIRONMENT verwenden, wenn Sie die Umgebung optimieren möchten, in der Ihre Tests ausgeführt werden, z. B. PATH. – tmatth

4

Sie scheinen 2 Fragen im ersten Absatz zu stellen.

Die erste ist das Hinzufügen von Tests zu den GNU Autotools Toolchain - aber diese Tests, wenn ich Sie richtig verstehe, sind für beide zu validieren, dass die Umgebung zum Erstellen Ihrer Anwendung existiert (abhängige Bibliotheken und Tools) sowie passen Sie den Build an die Umgebung an (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. Dies ist jedoch nicht konventionell - das Setzen eines "Test" -Ziels in Ihr Makefile ist eine konventionellere Art, Ihre Testsuite auszuführen. Die typischen Schritte zum Erstellen und Installieren einer Anwendung mit Autotools (zumindest aus der Sicht eines Benutzers, nicht aus Ihrer Perspektive des Entwicklers) ist, das configure-Skript auszuführen, dann make auszuführen, dann optional make test auszuführen und schließlich install zu machen.

Für die zweite Frage, nicht wollen, dass cppunit eine Abhängigkeit sein, warum nicht einfach mit Ihrer C++ - Anwendung zu verteilen? Kannst du es einfach in dein Archivformat (sei es tar.gz, tar.bz2 oder .zip) zusammen mit deinem Quellcode einfügen. Ich habe cppunit in der Vergangenheit verwendet und war damit zufrieden, nachdem ich JUnit und andere xUnit-Frameworks verwendet habe.

+0

keine Einsicht in die nach unten Abstimmung? Hatten Sie das Gefühl, dass die Frage nicht direkt angesprochen wurde? –

8

Ich Check 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 mit ([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 = @[email protected] 
    
  3. und Testcode schreiben, ./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 
    

Verwenden Sie überprüfen Timeout verwenden können und das Signal zu erhöhen. Es ist sehr hilfreich.

0

Sie können Automakes TESTS verwenden, um Programme auszuführen, die mit check_PROGRAMS generiert wurden, aber dies setzt voraus, dass Sie einen Protokolltreiber 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