2013-05-01 7 views
6

Meine C++ - Anwendung verfügt über verschiedene Shell-basierte Integrationstests für eigenständige Programme sowie Quellcode-Komponententests für die API der Anwendung. Die Tests laufen durch das Ziel make check, das durch Autotools (autoconf, automake) generiert wird, welches come with a test-driver and a log parser. Ich habe begonnen, das Boost Unit Test Framework für ein besseres Management von Unit-Test-Suites zu übernehmen. Gibt es eine Möglichkeit, sowohl die Abnahmetests als auch die Komponententests unter Verwendung des Boost UTF- und des Standard-TAP-Tests unter dem Ziel make check durchzuführen?Verwenden des Boost Unit Test Framework (UTF) mit `make check`

Mein Makefile.am sieht ungefähr so ​​aus:

check_PROGRAMS = test1 test2 
SOURCES = test1.cpp test2.cpp 
CC = g++ 
TESTS = $(check_PROGRAMS) standalone1.test standalone2.test 
LDADD = -lboost_unit_test_framework 
TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \ 
    $(top_srcdir)/test/tap-driver.sh 
EXTRA_DIST = $(TESTS) 

Die Boost UTF-Test-Suite wie folgt aussieht:

#define BOOST_TEST_DYN_LINK 
#define BOOST_TEST_MODULE "My Unit Tests" 

#include <boost/test/unit_test.hpp> 

BOOST_AUTO_TEST_SUITE(MyTestSuite1); 
    BOOST_AUTO_TEST_CASE(MyTestCase1) { 
     BOOST_CHECK(true); 
    } 
BOOST_AUTO_TEST_SUITE_END(); 

Antwort

2

Wenn Sie boost-m4 verwenden, wie ich, können Sie versuchen:

configure. ac:

BOOST_REQUIRE([1.61]) 
BOOST_SYSTEM 
BOOST_TEST 

./test/Makefile.am (add AM_CPPFLAGS, AM_LDFLAGS und LDADD)

AM_CPPFLAGS = $(BOOST_CPPFLAGS) -DBOOST_TEST_DYN_LINK 
AM_LDFLAGS = $(BOOST_LDFLAGS) $(BOOST_SYSTEM_LDFLAGS) $(BOOST_UNIT_TEST_FRAMEWORK_LDFLAGS) 
LDADD = $(BOOST_SYSTEM_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIBS) 

check_PROGRAMS = test1 test2 
SOURCES = test1.cpp test2.cpp 
CC = g++ 
TESTS = $(check_PROGRAMS) standalone1.test standalone2.test 
EXTRA_DIST = $(TESTS) 

Dies scheint eleganter zu sein als direkt '-lboost_unit_test_framework' in Makefile.am zu setzen. Sie können auch das Verschieben von #define BOOST_TEST_DYN_LINK von Ihrem cpp zu AM_CPPFLAGS in Makefile.am wie oben gezeigt in Betracht ziehen.

Weitere Informationen finden Sie in der README-Datei boost-m4

1

Der üblicher Weg, damit umzugehen nicht sind Vorwahlen verwenden aber den Test primären . In Ihrem Fall Ihre Makefile.am etwas aussehen würde:

LDADD = -lboost_unit_test_framework 

TESTS = standalone1 standalone2 
standalone1_SOURCES = test1.cpp standalone1.test 
standalone2_SOURCES = test2.cpp standalone2.test 

TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \ 
        $(top_srcdir)/test/tap-driver.sh 
EXTRA_DIST = $(TESTS) 

Für weitere Informationen lesen Sie in diesem answer