提振.测试-问题覆盖主程序
Boost.Test - problems overriding main
我想在使用Boost.Test时提供我自己的主要功能。因此,我包含了以下宏:
#define BOOST_TEST_ALTERNATIVE_INIT_API
#define BOOST_TEST_NO_MAIN
在我的main函数中,我有一个调用:
::boost::unit_test::unit_test_main(®istering_all_tests, argc, argv)
,但这给了我以下错误,当构建在OS X使用Xcode 6:
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入门指南指出:
提振。Test可以在"仅头文件"或"单独编译"模式下使用,尽管建议在严肃使用时单独编译。
我已经单独构建了这个库。
Boost文档还声明:
将UTF直接包含到测试模块
如果您希望避免独立的库编译,您可以包含构成静态库的所有文件测试模块的makefile或将它们作为测试模块的一部分源文件。为了方便后面的变体,UTF提供了单报头用法变体。在这两种情况下都没有特殊的构建选项或者需要将宏定义添加到编译中默认为选项列表。但同样的标志,可以用于独立库编译适用于这种情况。不过,显然,BOOST_TEST_DYN_LINK和BOOST_TEST_NO_LIB都不是适用。从长远来看,这个解决方案可能不是最好的选择,因为它需要为每个测试模块重新编译UTF源您可以将它用于正在工作的测试模块的每次更改上。因此,您的测试周期时间可能会增加。如果它变成我建议切换到一个预构建的库使用变体。
似乎通过选择包含单元测试框架的包含(与链接)版本,我正在做错误的事情。
谁能解释一下正确的方法?重写main的例子并没有提到这样做的必要性。最新版本的Boost。测试文档比以前的版本更详细地介绍了这个主题。
通过使用定义的符号BOOST_TEST_NO_MAIN
构建单元测试框架静态库,我可以提供自己的main函数,该函数手动调用默认的测试运行器unit_test_main
,默认的初始化函数init_unit_test
作为第一个参数:
int exitCode = ::boost::unit_test::unit_test_main(&init_unit_test_suite, argc, argv);
不需要定义BOOST_TEST_ALTERNATIVE_INIT_API
- 使用ios:ate写入到流会覆盖现有文件
- 我可以重新分配/覆盖std::字符串吗
- 叮叮当当在修复时插入多个"覆盖"说明符
- 谷歌模拟和覆盖关键字
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 使用子类覆盖基类中定义的函数
- 当覆盖存在时调用基本虚拟"binded to object"函数
- C++指针在 for 循环中被覆盖
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 为什么我的全局 new() 覆盖被绕过了?
- 被覆盖的函数不会反映在基类中,这是正常行为吗?
- C++找出覆盖同一行的数组
- 专门化模板覆盖函数/避免对象切片
- 重写打印函数而不是覆盖基类
- C++中"覆盖功能的异常规范比基本版本更宽松"的奇怪错误
- 如何在 c++ 中覆盖相同的文本文件
- 覆盖应用程序的低级别键盘挂钩问题
- glBindTexture 是否覆盖活动纹理单元的内容
- 提振.测试-问题覆盖主程序