bis*_*bis 5 c++ unit-testing structure boost-test
目前,我正在学习单元测试,我想将测试集成到我当前的(10 个 OpenGL 实验文件)项目中。为此,我下载了 Boost.Test,虽然我可以弄清楚它在单个文件样本上的工作原理,但我不知道如何将它集成到我的项目中(我想使用静态链接版本)。
测试与应用程序本身不同的二进制文件吗?(如果它是一个二进制文件,如何运行它?)我应该为每个测试类创建一个测试文件吗?我的 CMakeLists 应该改变多少来反映这种集成?是否可以将测试与应用程序分离,以便我可以在没有安装 boost 的平台上构建我的应用程序?
我知道我有很多问题,但简单地说:Boost.Test 在现实生活中是如何使用的?
无论您的项目构建库还是可执行文件,我建议您创建一个额外的测试运行程序可执行文件。在我的项目中,我通常有以下布局:
/mylib
CMakeLists.txt
/inc
ClassA.hpp
ClassB.hpp
/src
ClassA.cpp
ClassB.cpp
/test
ClassA_test.cpp
ClassB_test.cpp
main_test.cpp
Run Code Online (Sandbox Code Playgroud)
如您所见,每个类都有一个测试文件。这样做的主要好处是减少编译依赖性。然后在我的库中CMakeLists.txt创建我的库和相关的测试运行程序
# Get Boost
find_package ( Boost COMPONENTS unit_test_framework )
# Here you set library sources, use file ( GLOB ... ) if you have many
set ( SOURCES ClassA.cpp ClassB.cpp )
add_library ( mylib ${SOURCES} )
if (Boost_FOUND)
# Here you set test sources, use file ( GLOB ... ) if you have many
set ( TESTSOURCES ClassA_test.cpp ClassB_test.cpp )
# This creates the test runner
add_executable ( mylib_test_runner ${TESTSOURCES} )
# Here the tests of the runner are linked to the related library and Boost
target_link_libraries ( mylib_test_runner mylib ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} )
endif ( )
Run Code Online (Sandbox Code Playgroud)
文件 main_test.cpp 仅用于自动生成测试运行器的 main 函数
#define BOOST_TEST_MODULE MyTestSuite
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>
Run Code Online (Sandbox Code Playgroud)
然后,例如,ClassB_test.cpp可能具有以下布局:
#include "../inc/ClassB.hpp"
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE ( ClassBTest )
BOOST_AUTO_TEST_CASE ( TestFoo )
{
BOOST_CHECK(true);
}
...
BOOST_AUTO_TEST_SUITE_END() // ClassBTest
Run Code Online (Sandbox Code Playgroud)
总结一下:
./mylib_test_runner| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |