Boost测试错误:main已定义

4

我有一个 Visual Studio 项目,想要使用 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()

还有文件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已经被定义。 我注意到在unit_test.hpp文件中定义了main,但我需要包含它来使用测试宏。
我应该如何在2个不同的文件中添加2个测试用例?

3个回答

10
实际问题在于BOOST_TEST_MODULE只能在整个测试可执行文件中定义一次。定义BOOST_TEST_MODULE还会定义BOOST_TEST_MAIN,它会引入一个main的实现。
因此,在一个地方定义BOOST_TEST_MODULE为全局套件的名称,并且也定义BOOST_TEST_MAIN以获取单个main的实现。
这是一个微妙之处,我需要在我的文档重写中注意到它。

1
感谢您的文档。我需要的一切都在“仅头文件”部分中:http://user.xmission.com/~legalize/boost.test/libs/test/doc/html/test/guide/compilation/header_only.html/index.html - stoycho
2
他们已经重新编写了boost.test的文档,现在要好得多了。但是我有点懒,所以某个时候会删除上面链接中的内容 :) - legalize
我也发现@legalize的文档是唯一一个用例子简明地解释多文件情况下该怎么做的东西。 - rgov

1
你必须在每个测试源文件中使用#define BOOST_TEST_DYN_LINK

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接