提振.测试-问题覆盖主程序

Boost.Test - problems overriding main

本文关键字:覆盖 主程序 问题 测试 提振      更新时间:2023-10-16

我想在使用Boost.Test时提供我自己的主要功能。因此,我包含了以下宏:

#define BOOST_TEST_ALTERNATIVE_INIT_API
#define BOOST_TEST_NO_MAIN

在我的main函数中,我有一个调用:

::boost::unit_test::unit_test_main(&registering_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