Мое приложение C ++ имеет различные тесты интеграции на основе оболочки для автономных программ, а также модульные тесты исходного кода для API приложения. Тесты проходят через make check
target, сгенерированный через Autotools (autoconf, automake), который прийти с тест-драйвером и парсером журнала. Я начал применять Boost Unit Test Framework для лучшего управления наборами юнит-тестов. Есть ли способ запустить приемочные и модульные тесты (с использованием как Boost UTF, так и стандартных тестов TAP) под make check
цель?
мой Makefile.am
выглядит примерно так:
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)
Набор тестов Boost UTF выглядит следующим образом:
#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();
Если вы используете повышение-m4 Как и я, вы можете попробовать:
./configure.ac:
BOOST_REQUIRE([1.61])
BOOST_SYSTEM
BOOST_TEST
./test/Makefile.am (добавьте AM_CPPFLAGS, AM_LDFLAGS и 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)
Это кажется более элегантным, чем прямое помещение ‘-lboost_unit_test_framework’ в ваш Makefile.am. Вы также можете переместить ‘#define BOOST_TEST_DYN_LINK’ из вашего cpp в AM_CPPFLAGS в Makefile.am, как показано выше.
Для более подробной информации, обратитесь к boost-m4 README
Стандартный способ справиться с этим — не использование основных бен, а основной тест. В вашем случае ваш Makefile.am будет выглядеть примерно так:
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)
Для получения дополнительной информации проверьте это ответ