如何使用 boost C++ 开始单元测试

Posted

技术标签:

【中文标题】如何使用 boost C++ 开始单元测试【英文标题】:HOWTO start unit testing with boost C++ 【发布时间】:2016-02-24 04:23:02 【问题描述】:

我在文件中有以下基本测试:

//test.cpp
#define BOOST_TEST_MODULE test_module_name
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE(first_test)

    int i = 1;
    BOOST_TEST(i); 
    BOOST_TEST(i == 2); 

使用 gcc 编译和链接

gcc -L usr/local/lib/ -I usr/local/include/ \
    -c test/test.cpp -lboost_unit_test_framework \
    -lboost_test_exec_monitor -o build/test.out

当我运行 test.out 时出现以下错误

bash: ./test.out: cannot execute binary file: Exec format error

我认为这个问题可能与这个文件没有 main 函数的事实有关,这是因为我希望 test exec monitor 运行这个测试,而这并没有发生。

Q1) 我能否获得详细的 HOWTO 使用 boost 进行基本单元测试

Q2) exec monitor 运行这些测试需要什么?

【问题讨论】:

参考:boost.org/doc/libs/1_60_0/libs/test/doc/html/boost_test/… 【参考方案1】:

您提供的 -c 选项仅生成目标文件。您需要链接它以生成可执行文件。

【讨论】:

【参考方案2】:

您的测试需要在test suite 中运行,例如BOOST_AUTO_TEST_SUITE. 我通常在每个单元测试文件中放一个,例如:

#include "via/geometry/wgs84/derived_parameters.hpp"
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(Test_WGS84)

BOOST_AUTO_TEST_CASE(test_wgs84_parameters)

  // primary_parameters
  BOOST_CHECK_EQUAL(6378137.0,        wgs84::a);
  BOOST_CHECK_CLOSE(0.00335281068118, wgs84::f, 0.000001); // 0.000001% tolerance

  // derived_parameters
  BOOST_CHECK_CLOSE(6356752.3141,     wgs84::b,   0.0000001);
  BOOST_CHECK_CLOSE(0.00669437999014, wgs84::e_2, 0.0000001);
  BOOST_CHECK_CLOSE(0.08181919084262, wgs84::e,   0.0000001);


BOOST_AUTO_TEST_SUITE_END()

您可以将BOOST_TEST_MODULE 放入test exec monitor 的单元测试文件中。 但是,我更喜欢把它放在一个单独的文件中,这样就可以通过简单地将新的测试文件添加到构建中来添加新的单元测试,例如test_main.cpp:

#ifndef _MSC_VER
#define BOOST_TEST_DYN_LINK
#endif
#define BOOST_TEST_MAIN
#define BOOST_TEST_MODULE Main
#include <boost/test/unit_test.hpp>

【讨论】:

以上是关于如何使用 boost C++ 开始单元测试的主要内容,如果未能解决你的问题,请参考以下文章

带有 boost::multiprecision 的单元测试

我可以将多个BOOST单元测试链接到一个测试二进制文件中吗?

Boost.Spirit 的单元测试

C ++单元测试框架的比较[关闭]

使用夹具时提升单元测试过滤器

iOS 应用程序的 Xcode 单元测试中的链接问题与嵌入式 C++ 代码