增强测试链接

Boost test linking

本文关键字:链接 测试 增强      更新时间:2023-10-16

我想在我的项目中使用Boost test

我使用cmake在我的项目,所以我写了一个简单的CMakeList.txt包装它:

find_package (Boost COMPONENTS unit_test_framework REQUIRED)
file(GLOB_RECURSE UnitTests_sources tests/*.cpp)
add_executable(UnitTests
    ${UnitTests_sources}
)
enable_testing()
ADD_TEST (UnitTests UnitTests)

所以,cmake在这里工作得很好。问题出现在编译过程中:

链接CXX可执行文件。/../bin/UnitTests

/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/../../../../lib/crt1。o:_start': (.text+0x20): undefined reference to main'Collect2: ld返回1退出状态

以下是tests文件夹(LogManagerTest.cpp)中唯一的文件:

#include "Utils/LogManager.hpp"
#include <boost/test/unit_test.hpp>
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
#define BOOST_TEST_MODULE LogManager
BOOST_AUTO_TEST_CASE(LogManagerCase)
{
    BOOST_REQUIRE(true);
    /*LogManager manager;
    manager.Initialize();
    manager.Deinitialize();*/
}

怎么了?

添加

ADD_DEFINITIONS(-DBOOST_TEST_DYN_LINK) 

到你的CMakeLists.txt中,这样它会自动为你生成一个main()。另外,

#define BOOST_TEST_MODULE xxx

必须在包含unit_test.hpp之前定义。

你可以找到更多的信息和选项:http://www.boost.org/doc/libs/1_47_0/libs/test/doc/html/utf/compilation.html

您需要使用-lboost_unit_test_framework进行编译,如果您使用BOOST_TEST_DYN_LINK, boost将为您生成main,因此您需要告诉makefile查找该main。然后可以使用以下命令进行编译:

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE LogManager                                   
BOOST_AUTO_TEST_CASE(LogManagerCase)                                   
{                                                                      
    BOOST_REQUIRE(true);                                               
    /*LogManager manager;                                              
    manager.Initialize();                                              
    manager.Deinitialize();*/                                          
}                                                                      
BOOST_AUTO_TEST_SUITE_END()    

试着移动

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN

有一次我犯了一个愚蠢的打字错误,也得到了这个。编译器被骗了

就像"#define BOOTS_TEST_MODULE DUMMY"一样。是的,我喜欢靴子