我有一个代码库,我想在其上执行测试。除了程序的主要功能之外,这个代码库的一个文件包含我想要测试的代码。
当我将此文件添加到我的CMakeLists时,它抱怨包含多个主要功能。
以下是事情:
RunTest.cpp:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE Main
#include <boost/test/unit_test.hpp>
MyTest1.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忽略我的代码库中的main函数?
答案 0 :(得分:0)
为了避免测试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
只不过是一个主要功能,当然不单元测试。