Boost.Test - 覆盖主

时间:2015-09-02 07:39:03

标签: c++ unit-testing boost boost-test

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

#define BOOST_TEST_ALTERNATIVE_INIT_API
#define BOOST_TEST_NO_MAIN

在我的主要功能中,我打电话给:

::boost::unit_test::unit_test_main(&registering_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源   您使用它并且对于您正在使用的测试模块的每次更改   上。结果,您的测试周期时间可能会增加。如果它变成了   令人厌倦,我建议切换到预建的库使用之一   变体。

通过选择包含单元测试框架的包含(与链接)版本,我似乎错了。

有人可以澄清正确的方法。最重要的主要例子没有提到需要这样做。

0 个答案:

没有答案