提升测试错误:主要已定义

时间:2014-03-11 14:25:46

标签: 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个测试用例?

3 个答案:

答案 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

相关问题