使用Boost单元测试框架(UTF)和`make check`

时间:2013-05-01 01:32:12

标签: c++ unit-testing boost autotools tap

我的C ++应用程序针对独立程序进行了各种基于shell的集成测试,以及针对应用程序API的源代码单元测试。测试通过make check目标运行,该目标通过Autotools(autoconf,automake)生成,come with a test-driver and a log parser。我已经开始采用Boost Unit Test Framework来更好地管理单元测试套件。有没有办法在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();

2 个答案:

答案 0 :(得分:2)

如果你像我一样使用boost-m4,你可以尝试:

./ configure.ac:

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)

./ test / Makefile.am(添加AM_CPPFLAGS,AM_LDFLAGS和LDADD)

import * as fs from 'fs';

这似乎比直接放入&#39; -lboost_unit_test_framework&#39;更优雅。在你的Makefile.am里面。您也可以考虑移动&#39; #define BOOST_TEST_DYN_LINK&#39;从您的cpp到Makefile.am中的AM_CPPFLAGS,如上所示。

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

答案 1 :(得分:1)

处理它的标准方法不是使用bin原色而是使用TEST primary。在你的情况下你的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)

有关详细信息,请查看此answer