我有这个最小的单元测试:
#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
。
我做错了什么?
答案 0 :(得分:3)
动态关联Boost.Test时,您需要定义BOOST_TEST_DYN_LINK
(see 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}}仅在其中一个模块中定义,之前包含。