c++ - boost 测试错误 : main already defined

标签 c++ boost boost-test

我有一个 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 个测试用例?

最佳答案

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

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

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

关于c++ - boost 测试错误 : main already defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22328644/

相关文章:

c++ - 如何在非托管 C++ 中使用 Enum::GetName

c++ - 在哪里使用 std::span?

c++ - 从 Atmel Studio 6 运行单元测试

c++ - Boost.Test 自定义类型使用装饰器 boost::unit_test::tolerance

c++ - boost 迭代器适配器的编译器错误

c++ - boost 测试链接

c++ - 将 shared_ptr 作为参数传递给接受类类型对象的函数

c++ - 奇怪的! static const unsigned 不是类模板中的常量表达式?

c++ - 使用 Boost Spirit 提取未分隔的字符串和整数

c++ - 带 boost 的最小生成树