【问题标题】:Using The Boost Unit Test Framework (UTF) with `make check`将 Boost 单元测试框架 (UTF) 与 `make check` 一起使用
【发布时间】:2013-05-01 01:32:11
【问题描述】:

我的 C++ 应用程序有各种基于 shell 的独立程序集成测试以及应用程序 API 的源代码单元测试。测试通过 make check 目标运行,通过 Autotools (autoconf, automake) 生成,come with a test-driver and a log parser。我已经开始采用 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();

【问题讨论】:

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


    【解决方案1】:

    如果你和我一样使用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

    【讨论】:

      【解决方案2】:

      处理它的标准方法不是使用 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)
      

      更多信息请查看answer

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-14
        • 2011-01-14
        • 1970-01-01
        • 2016-11-19
        相关资源
        最近更新 更多