gpt4 book ai didi

c++ - Boost 单元测试框架 : include main function of my codebase

转载 作者:太空宇宙 更新时间:2023-11-04 13:19:53 25 4
gpt4 key购买 nike

我有一个代码库,我想对其执行测试。除了程序的主要功能外,此代码库的其中一个文件还包含我要测试的代码。

当我将此文件添加到我的 CMakeLists 时,它会提示包含多个主要函数。

事情是这样的:

运行测试.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()

这是我的 CMakeList 的样子:

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 只不过是一个主函数,当然没有单元测试。

关于c++ - Boost 单元测试框架 : include main function of my codebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35695517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com