我有一个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个测试用例?
答案 0 :(得分:7)
真正的问题是BOOST_TEST_MODULE只能在整个测试可执行文件中定义一次。定义BOOST_TEST_MODULE还定义了BOOST_TEST_MAIN,它引入了main的实现。
因此,在一个地方将BOOST_TEST_MODULE定义为全局套件的名称,因此也定义BOOST_TEST_MAIN以获得main的单个实现。
这是我需要在documentation rewrite中注意到的一个微妙之处。
答案 1 :(得分:0)
你必须使用
#define BOOST_TEST_DYN_LINK
在每个带有测试的源文件中。
答案 2 :(得分:0)
testXXX.h不应包含在testXXX.cpp中。
所有testXXX.h文件都应包含在main.cpp中,该文件应包含#define BOOST_TEST_MODULE TestXXXXXXXXX