静态Boost.Test库和动态Boost.Test库

3

我有一个与BOOST.Test框架相关的问题,并通过以下示例说明我的问题: 我构建了一个TestClass库,其中包含所有测试类,该库可以是静态的或动态的。该库中的一个典型函数如下:

__declspec(dllexport) HelloWorld()
{

        int i= 2;
        int j= 1;
            BOOST_CHECK(i == j);
        BOOST_CHECK_EQUAL(i,j);
}

接下来,我设置了一个可执行程序(例如main.cpp),该程序将调用这个库:

test_suite* init_unit_test_suite( int argc, char* argv[] ) 
{ 
    framework::master_test_suite().add( BOOST_TEST_CASE( &HelloWorld ) ); 

    return 0; 
} 

对于TestClass类库和可执行程序,它们都需要BOOST.Test类库。我构建的BOOST.Test类库是静态的。然后我发现:

  • 如果TestClass类库是静态的,那么一切都很顺利。

  • 但是,如果TestClass类库是动态的,那么我收到了以下错误信息:

    未知位置(0): "HelloWorld"中的致命错误: std::runtime_error:在初始化框架之前无法使用测试工具。 有什么想法吗?谢谢。


你为什么要将测试用例放在单独的 DLL 中呢?这样做有什么目的吗? - Martin Ba
@MartinBa 感谢您的评论。将测试用例放在单独的 DLL 中的原因是,单独的 DLL 可能包含一些可用于非测试目的的函数。 - feelfree
通常将非测试代码(即实用程序或“生产”代码)与测试代码混合在一起是一个不好的想法。将两者分开,你的生活会变得轻松得多。这只是遵循良好的包设计原则而已,我将C++中的库称为“包”。 - legalize
1个回答

2

请确保定义BOOST_TEST_DYN_LINK:

如果您选择将测试模块与预构建的动态库链接, 这种用法称为UTF的动态库变体。这 变体要求您在makefile中或在头文件boost/test/unit_test.hpp包含之前定义标志BOOST_TEST_DYN_LINK
UTF的动态库变体

#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>

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