Boost.Test - 重写主要的问题
我想在使用Boost.Test时提供我自己的主要功能。所以我已经包括下面的宏: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可以在“仅标头”或“单独编译”模式下使用, 虽然独立编译建议使用严重。
我已经分开建立了库。
升压文档还指出:
直接包括UTF到您的测试模块
如果你喜欢,以避免独立的库编译就可以 既包括构成静态库中的所有文件您的 测试模块的生成文件或将它们作为测试模块的源文件的一部分。为了方便后面的变体,UTF提供了 单头使用变体。无论哪种情况,默认情况下都不需要特殊编译选项 或宏定义添加到编译 选项列表。但是,在这种情况下,可以使用与独立库编译相同的标志。显然,虽然, ,但BOOST_TEST_DYN_LINK和BOOST_TEST_NO_LIB都不适用 。长期来看,这种解决方案可能并不是最好的选择,因为它需要为每个测试模块 使用的每个测试模块 重新编译UTF源文件,并且每次更改测试模块 。结果你的测试周期时间可能会增加。如果它成为 令人讨厌,我建议切换到其中一个预建库使用 变种。
看来,通过选择包含单元测试框架的包含(对比链接)版本,我是错误的东西。
有人可以澄清正确的方法。重写主要的例子没有提到需要这样做。
最新版本的Boost.Test documentation比以前的版本更详细地介绍了这个主题。
通过建立与定义的符号BOOST_TEST_NO_MAIN
单元测试框架的静态库的话,我可以提供我自己的主要功能,使用默认初始化函数init_unit_test
作为第一个参数手动调用默认测试运行unit_test_main
:
int exitCode = ::boost::unit_test::unit_test_main(&init_unit_test_suite, argc, argv);
没有必要定义BOOST_TEST_ALTERNATIVE_INIT_API
。