提升单元测试框架:包括我的代码库的主要功能

Boost unit test framework: include main function of my codebase

本文关键字:功能 代码 我的 单元测试 框架 包括      更新时间:2023-10-16

我有一个代码库,我想在上面进行测试。除了程序的主要功能外,此代码库的一个文件还包含我要测试的代码。

当我将此文件添加到我的 CMakeList 时,它抱怨包含多个主要函数。

事情是这样的:

运行测试.cpp:

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

我的测试1.cpp:

#define BOOST_TEST_MODULE test_1_module
#define BOOST_TEST_DYNAMIC_LINK
#include <boost/test/unit_test.hpp>
#include <boost/test/parameterized_test.hpp>
#include <boost/test/unit_test_log.hpp>
#include <boost/test/results_collector.hpp>
#include "../MyCode.h"
BOOST_AUTO_TEST_SUITE(test_suite_one)
BOOST_AUTO_TEST_CASE {
...
}
BOOST_AUTO_TEST_SUITE_END()

以下是我的CMakeLists的样子:

SET (
    TestRunner
    RunTest.cpp
    MyCode.cpp #contains a main function
)
ADD_EXECUTABLE(TestRunner $TestRunner)

我该如何解决这个问题?有没有办法要求 boost 忽略我的代码库中的主函数?

为了避免测试exe中多个main函数的错误,我将项目分成两个项目。CMake 代码:

add_library (MyProject_base STATIC ${MYPROJECT_BASE_SRC})
add_executable (MyProject ${MYPROJECT_SRC})
add_executable (MyProject_Test ${MYPROJECT_TEST_SRC})
target_link_libraries(MyProject_base
    #stuff
)
target_link_libraries(MyProject
    MyProject_base
    #stuff
)        
target_link_libraries (MyProject_Test
    MyProject_base
    #stuff
)

现在MyProject_base构建为静态库,链接到实际的可执行MyProject以及测试exe MyProject_Test。然后MyProject_base中的代码是单元测试的,而MyProject只不过是一个 main 函数,当然没有经过单元测试。