C++ Boost测试错误:已定义main

C++ Boost测试错误:已定义main,c++,boost,boost-test,C++,Boost,Boost Test,我有一个visualstudio项目,我想用Boost.Test做一些单元测试 我有两个文件: 文件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);

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

我有两个文件:

文件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()
#定义BOOST_TEST_模块文件
#包括
#包括
BOOST\u AUTO\u TEST\u SUITE(测试套件名称)
BOOST\u AUTO\u TEST\u案例(TestFileX)
{
增压检查(真);
}
BOOST\u AUTO\u TEST\u SUITE\u 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()
#定义BOOST_TEST_模块XContainer
#包括
#包括
增压自动测试套件(测试套件名称2)
BOOST\u AUTO\u TEST\u案例(TestXContainer)
{
增压检查(真);
}
BOOST\u AUTO\u TEST\u SUITE\u END()
当我编译这个项目时,我得到了一个链接错误,表示main已经定义。 我注意到,
main
文件是在
unit\u test.hpp
中定义的,但我需要将其包含在测试宏中

如何在两个单独的文件中添加两个测试用例?

您必须使用
#定义BOOST\u TEST\u DYN\u链接

在每个包含测试的源文件中。

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

因此,在一个地方定义BOOST_TEST_MODULE作为全局套件的名称,并因此定义BOOST_TEST_MAIN以获得MAIN的单个实现


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

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


所有testXXX.h文件都应包含在main.cpp中,main.cpp应包含
#define BOOST\u TEST\u MODULE TestXXXXXXXXX

可能的副本,谢谢您的文档。我需要的一切都在“仅标题”部分:他们已经重写了boost.test的文档,现在好多了。在某个时候,我会删除上面链接中的内容,但我很懒:)我也发现@legalize的文档是唯一一个能够用示例简要说明在多文件情况下该怎么做的东西。