【发布时间】:2015-09-02 07:39:03
【问题描述】:
我想在使用 Boost.Test 时提供自己的主要功能。所以我包含了以下宏:
#define BOOST_TEST_ALTERNATIVE_INIT_API
#define BOOST_TEST_NO_MAIN
在我的主要功能中,我调用了:
::boost::unit_test::unit_test_main(®istering_all_tests, argc, argv)
但是当使用 Xcode 6 在 OS X 上构建时,这给了我以下错误:
Undefined symbols for architecture x86_64:
"boost::unit_test::unit_test_main(bool (*)(), int, char**)", referenced from:
_main in main.o
我发现包括以下文件:
#include <boost/test/included/unit_test.hpp>
解决了这个问题,但我对其中的含义感到困惑。该文件的描述表明它使用包含(相对于链接)版本的单元测试框架。
Boost 入门指南指出:
Boost.Test 可以在“仅头文件”或“单独编译”模式下使用, 虽然建议认真使用单独编译。
我已经单独构建了库。
Boost 文档还指出:
将 UTF 直接包含到您的测试模块中
如果您希望避免独立库编译,您可以 要么将构成静态库的所有文件包含在您的 测试模块的 makefile 或将它们作为测试模块的一部分 源文件。为了方便后面的变体,UTF 呈现 单头使用变体。在任何一种情况下都没有特殊的构建选项 或需要将宏定义添加到您的编译中 默认选项列表。但同样的标志可以用于 独立库编译适用于这种情况。尽管, 显然,BOOST_TEST_DYN_LINK 和 BOOST_TEST_NO_LIB 都不是 适用的。从长远来看,这种解决方案可能不是最佳选择, 因为它需要为每个测试模块重新编译 UTF 源代码 您将它与您正在工作的测试模块的每次更改一起使用 在。因此,您的测试周期时间可能会增加。如果变成 烦人,我建议切换到预建库用法之一 变种。
似乎通过选择包含单元测试框架的包含(与链接)版本,我做错了。
有人可以澄清正确的方法吗?覆盖 main 的示例没有提到需要这样做。
【问题讨论】:
标签: c++ unit-testing boost boost-test