Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using The Boost Unit Test Framework (UTF) with `make check`

My C++ application has various shell-based integrations tests for standalone programs as well as source code unit tests for the app's API. The tests are run through the make check target, generated through Autotools (autoconf, automake), which come with a test-driver and a log parser. I've started adopting the Boost Unit Test Framework for better management of unit test suites. Is there a way to run both the acceptance tests and unit tests (using both the Boost UTF and standard TAP tests) under the make check target?

My Makefile.am looks something like this:

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)

The Boost UTF test suite looks like this:

#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();
like image 270
Gingi Avatar asked May 01 '13 01:05

Gingi


1 Answers

If you are using boost-m4 like I do, you can try:

./configure.ac:

BOOST_REQUIRE([1.61])
BOOST_SYSTEM
BOOST_TEST

./test/Makefile.am (add AM_CPPFLAGS, AM_LDFLAGS and 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)

This seems to be more elegant than directly putting '-lboost_unit_test_framework' inside your Makefile.am. You may also consider moving '#define BOOST_TEST_DYN_LINK' from your cpp to AM_CPPFLAGS in Makefile.am as shown above.

For more details, refer to boost-m4 README

like image 181
Steven Lai Avatar answered Oct 04 '22 17:10

Steven Lai