6

我的 C++ 应用程序有各种基于 shell 的独立程序集成测试以及应用程序 API 的源代码单元测试。测试通过make check目标运行,通过 Autotools (autoconf, automake) 生成,带有测试驱动程序和日志解析器。我已经开始采用 Boost 单元测试框架来更好地管理单元测试套件。有没有办法在make check目标下运行验收测试和单元测试(同时使用 Boost UTF 和标准 TAP 测试)?

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();
4

2 回答 2

2

如果您像我一样使用boost-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 移动到 Makefile.am 中的 AM_CPPFLAGS,如上所示。

有关详细信息,请参阅 boost-m4 README

于 2016-08-11T08:46:45.310 回答
1

处理它的标准方法不是使用 bin 主文件,而是使用 TEST 主文件。在您的情况下,您的 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)

有关更多信息,请查看此答案

于 2015-04-14T04:59:27.430 回答