1. 环境准备
-
确保您的开发环境中已安装 C++ 编译器(如 GCC 或 Clang)。
-
安装 Boost 库。可以从 Boost 官方网站下载并安装
2. 编写测试代码
Boost.Test 提供了丰富的宏和工具来帮助编写测试用例。以下是一个简单的示例:
说明:
(1) 测试套件(Test Suite)和测试用例(Test Case)是 Boost.Test 的核心组成部分。测试套件用于组织多个测试用例,而测试用例则是具体的测试逻辑。
(2) 使用 BOOST_AUTO_TEST_SUITE
宏开始一个测试套件
(3) 使用 BOOST_AUTO_TEST_CASE
宏定义测试用例
(4) 使用 BOOST_AUTO_TEST_SUITE_END
宏结束测试套件
(5) 确保您的 Boost.Test 版本支持动态链接(BOOST_TEST_DYN_LINK
)。如果不确定,可以尝试定义 BOOST_TEST_DYN_LINK
宏
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE MyTestModule
#include <boost/test/included/unit_test.hpp>
// 定义一个测试套件
BOOST_AUTO_TEST_SUITE(MyTestSuite)
// 定义一个测试用例
BOOST_AUTO_TEST_CASE(TestAddition)
{
int a = 2, b = 3;
BOOST_CHECK_EQUAL(a + b, 5); // 检查 a + b 是否等于 5
}
BOOST_AUTO_TEST_SUITE_END()
3. 编译和运行测试
-
使用 CMake 编写构建文件:
cmake_minimum_required(VERSION 3.10) project(MyTestProject) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True) find_package(Boost REQUIRED COMPONENTS unit_test_framework) add_executable(run_tests_fm main.cpp) // main.cpp 是测试代码文件 target_link_libraries(run_tests_fm Boost::unit_test_framework)
-
编译项目:
-
创建一个
build
目录并进入该目录。 -
运行
cmake ..
生成构建文件。 -
运行
make
编译项目。
-
-
运行测试程序:
-
执行生成的可执行文件(如
./run_tests
)。 -
可以通过命令行参数调整测试输出,例如:
-
--log_level=all
:显示所有日志信息。 -
--run_test=MyTestSuite/TestAddition
:仅运行指定的测试用例。
-
-
- 测试问题截图
- 缺失Boost.Test 版本支持动态链接
- 完整的测试输出
- 不带完整日志
- 带完整日志
- 不带完整日志
- 缺失Boost.Test 版本支持动态链接
4. 常用断言和工具
(1)Boost.Test 提供了多种断言宏,用于不同的测试场景:
-
基本断言:
-
BOOST_CHECK(condition)
:检查条件是否为真,失败时不中断测试。 -
BOOST_REQUIRE(condition)
:检查条件是否为真,失败时中断当前测试用例。
-
-
比较断言:
-
BOOST_CHECK_EQUAL(lhs, rhs)
:检查两个值是否相等。 -
BOOST_CHECK_CLOSE(lhs, rhs, tolerance)
:检查浮点数是否在误差范围内。
-
-
异常断言:
-
BOOST_CHECK_THROW(statement, exception)
:检查是否抛出指定异常。
-
(2)测试装饰器用于为测试套件和测试用例添加额外信息,例如标签、描述等。
-
添加标签:
BOOST_AUTO_TEST_CASE(t_case1, *boost::unit_test::label("low"))
-
使用
boost::unit_test::label
为测试用例添加标签。
-
-
添加描述:
BOOST_AUTO_TEST_CASE(t_case1, *boost::unit_test::description("a normal test case"))
-
使用
boost::unit_test::description
添加描述信息。
-
5. 更多功能
-
Boost.Test 的 GitHub 仓库地址:GitHub - boostorg/test: The reference C++ unit testing framework (TDD, xUnit, C++03/11/14/17)
-
日志和报告:支持多种日志格式(如纯文本、XML、JUnit)。
-
日志级别
Boost.Test 支持多种日志级别,用于控制输出的详细程度。日志级别从低到高依次为:-
nothing:不输出任何信息。
-
fatal:输出致命错误。
-
system_error:输出系统错误(如超时或浮点异常)。
-
cpp_exception:输出未捕获的 C++ 异常。
-
error:输出所有错误信息。
-
warning:输出警告信息。
-
message:输出用户信息。
-
test_suite:输出测试套件信息。
-
all / success:输出所有信息,包括成功测试的通知。
-
-
控制日志输出
可以通过命令行参数控制日志的输出级别和格式。常用参数包括:-
--log_level=<level>
:设置日志级别,如all
、error
、warning
等。 -
--log_format=<format>
:设置日志格式,支持 HRF(可读格式)和 XML 格式。 -
--log_sink=<file>
:将日志输出到指定文件,而不是标准输出-
<TestLog> <TestSuite name="MyTestModule"> <TestSuite name="MyTestSuite" file="/home/mogo/data/matt/test1/my_test.cpp" line="5"> <TestCase name="TestAddition" file="/home/mogo/data/matt/test1/my_test.cpp" line="7"> <Info file="/home/mogo/data/matt/test1/my_test.cpp" line="10"><![CDATA[check a + b == 5 has passed]]></Info> <TestingTime>124</TestingTime> </TestCase> <TestCase name="TestSubtraction" file="/home/mogo/data/matt/test1/my_test.cpp" line="13"> <Info file="/home/mogo/data/matt/test1/my_test.cpp" line="16"><![CDATA[check a - b == 2 has passed]]></Info> <TestingTime>151</TestingTime> </TestCase> </TestSuite> </TestSuite> </TestLog>
-
-
显示进度:使用
--show_progress=yes
参数显示测试进度。 -
生成构建信息:使用
--build_info=yes
参数在测试开始前打印操作系统版本、编译器版本等信息。
-
-