11

我运行这段代码

#define BOOST_TEST_MAIN
#define BOOST_TEST_DYN_LINK

#include <boost/test/unit_test.hpp>
#include <boost/test/unit_test_log.hpp>
#include <boost/filesystem/fstream.hpp>

#include <iostream>

using namespace boost::unit_test;
using namespace std;


void TestFoo()
{
    BOOST_CHECK(0==0);
}

test_suite* init_unit_test_suite( int argc, char* argv[] )
{
    std::cout << "Enter init_unit_test_suite" << endl;
    boost::unit_test::test_suite* master_test_suite = 
                        BOOST_TEST_SUITE( "MasterTestSuite" );
    master_test_suite->add(BOOST_TEST_CASE(&TestFoo));
    return master_test_suite;

}

但在运行时它说

测试设置错误:测试树为空

为什么它不运行 init_unit_test_suite 函数?

4

2 回答 2

3

您实际上是否动态链接到 boost_unit_test 框架库?此外,手动测试注册和定义的组合BOOST_TEST_MAIN不起作用。动态库需要稍有不同的初始化例程。

避免这个障碍的最简单方法是使用自动测试注册

#define BOOST_TEST_MAIN
#define BOOST_TEST_DYN_LINK

#include <boost/test/unit_test.hpp>
#include <boost/test/unit_test_log.hpp>
#include <boost/filesystem/fstream.hpp>

#include <iostream>

using namespace boost::unit_test;
using namespace std;

BOOST_AUTO_TEST_SUITE(MasterSuite)

BOOST_AUTO_TEST_CASE(TestFoo)
{
    BOOST_CHECK(0==0);
}

BOOST_AUTO_TEST_SUITE_END()

当您添加越来越多的测试时,这会更加健壮并且可以更好地扩展。

于 2013-06-10T13:10:43.207 回答
3

我有完全相同的问题。除了切换到自动测试注册如前所述,您还可以使用静态链接,即通过替换

#define BOOST_TEST_DYN_LINK

#define BOOST_TEST_STATIC_LINK

这是在boost 邮件列表中建议的:

解决此问题的最简单方法是 [...] 与静态库链接。

自 1.34.1 以来,动态库初始化 API 略有不同,这就是您看到的错误的原因。在这种情况下不调用 init_unit_test_suite 函数。

于 2013-08-02T08:46:35.080 回答