【问题标题】:Boost Test Error: main already definedBoost 测试错误:main 已经定义
【发布时间】:2014-03-11 14:25:45
【问题描述】:

我有一个Visual Studio 项目,我想用Boost.Test 做一些单元测试。

我有 2 个文件:

文件 1:

#define BOOST_TEST_MODULE FileX

#include <boost/test/unit_test.hpp>
#include <stdio.h>

BOOST_AUTO_TEST_SUITE(test_suite_name)

BOOST_AUTO_TEST_CASE(TestFileX)
{
    BOOST_CHECK(true);
}


BOOST_AUTO_TEST_SUITE_END()

还有文件 2:

#define BOOST_TEST_MODULE XContainer

#include <boost/test/unit_test.hpp>
#include <stdio.h>

BOOST_AUTO_TEST_SUITE(test_suite_name2)

BOOST_AUTO_TEST_CASE(TestXContainer)
{
    BOOST_CHECK(true);
}

BOOST_AUTO_TEST_SUITE_END()

当我编译项目时,我收到一个链接错误,说明 main 已定义。 我注意到main 文件在unit_test.hpp 中定义,但我需要将它包含在测试宏中。

我应该如何在 2 个单独的文件中添加 2 个测试用例?

【问题讨论】:

标签: c++ boost boost-test


【解决方案1】:

真正的问题是 BOOST_TEST_MODULE 只打算在整个测试可执行文件中定义一次。定义 BOOST_TEST_MODULE 还定义了 BOOST_TEST_MAIN ,它引入了 main 的实现。

因此,在一个地方将 BOOST_TEST_MODULE 定义为全局套件的名称,因此还定义 BOOST_TEST_MAIN 以获得 main 的单个实现。

这是我需要在documentation rewrite 中注明的一个微妙之处。

【讨论】:

  • 感谢您的文档。我需要的一切都在“仅标题”部分:user.xmission.com/~legalize/boost.test/libs/test/doc/html/test/…
  • 他们已经重写了 boost.test 的文档,现在好多了。在某些时候我会删除上面链接的内容,但我很懒:)
  • 我也发现@legalize 的文档是唯一能够通过示例简明扼要地解释在多文件案例中该怎么做的东西。
【解决方案2】:

testXXX.h 不应包含在 testXXX.cpp 中。

所有的 testXXX.h 文件都应该包含在 main.cpp 中,其中应该包含#define BOOST_TEST_MODULE TestXXXXXXXXX

【讨论】:

    【解决方案3】:

    你必须使用 #define BOOST_TEST_DYN_LINK 在每个带有测试的源文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      相关资源
      最近更新 更多