Boost单元测试框架无法找到主要功能

时间:2016-04-16 23:07:31

标签: c++ unit-testing boost

我有这个最小的单元测试:

#include <boost/test/unit_test.hpp>
#define BOOST_TEST_MODULE a_test

struct Color{};

BOOST_AUTO_TEST_CASE(color_test)
{
    BOOST_CHECK(std::is_pod<Color>());
}

然而,当我像这样编译它时

clang -std=c++14 -lc++ -lboost_unit_test_framework a_test.cc -o main

我得到了_main的未定义符号。 -lboost_unit_test_framework使用共享库。

之前我使用过这个库,我记得不必自己声明一个main函数,因为它自动运行了我定义的几个BOOST_AUTO_TEST_CASE

我做错了什么?

2 个答案:

答案 0 :(得分:3)

动态关联Boost.Test时,您需要定义BOOST_TEST_DYN_LINKsee boost docs here)。

您可能还需要关联boost_test_exec_monitor

此外,在包含库头以产生任何影响之前,需要定义所有配置宏。

答案 1 :(得分:0)

@ melak47也是对的。我相信以下内容也应该有效:

#define BOOST_TEST_MODULE my_tests TestSuites // to define main()
#include <boost/test/unit_test.hpp>

struct Color{};

BOOST_AUTO_TEST_SUITE(MyColorTests)

BOOST_AUTO_TEST_CASE(color_test)
{
    BOOST_CHECK( std::is_pod<Color>() );
}

BOOST_AUTO_TEST_SUITE_END()

如果您将多个此类模块链接在一起,请确保{<1}}仅在其中一个模块中定义,之前包含。