Использование Boost Unit Test Framework (UTF) с `make check`

Мое приложение 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();

6

Решение

Если вы используете повышение-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

2

Другие решения

Стандартный способ справиться с этим — не использование основных бен, а основной тест. В вашем случае ваш 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)

Для получения дополнительной информации проверьте это ответ

1

По вопросам рекламы [email protected]