模式匹配
经常需要根据 “黄金日志” 测试函数生成的输出。BOOST_CHECK 也适合执行这种测试,这还需要用到 Boost 库的 output_test_stream 类。用黄金日志文件(以下示例中的 run.log)初始化 output_test_stream。C/C++ 函数的输出被提供给这个 output_test_stream 对象,然后调用这个对象的 match_pattern 例程。清单 7 提供了详细代码。
清单 7. 根据黄金日志文件执行模式匹配
#define BOOST_TEST_MODULE example |
浮点比较
回归测试中最棘手的检查之一是浮点比较。请看一下 清单 8,看起来没什么问题 — 至少从表面看是这样。
清单 8. 无效的浮点比较
#define BOOST_TEST_MODULE floatingTest |
运行这个测试时,尽管使用的是作为标准库一部分提供的 sqrt 函数,BOOST_CHECK 宏仍然会失败。什么地方出错了?浮点比较的问题在于精度 — f1 和 result*result 在小数点后面的几位不一致。为了解决这个问题,Boost 测试实用程序提供了 BOOST_WARN_CLOSE_FRACTION、BOOST_CHECK_CLOSE_FRACTION 和 BOOST_REQUIRE_CLOSE_FRACTION 宏。要想使用这三个宏,必须包含预定义的 Boost 头文件 floating_point_comparison.hpp。这三个宏的语法是相同的,所以本文只讨论 check 变体(见 清单 9)。
清单 9. BOOST_CHECK_CLOSE_FRACTION 宏的语法
BOOST_CHECK_CLOSE_FRACTION (left-value, right-value, tolerance-limit);
清单 9 中没有使用 BOOST_CHECK,而是使用 BOOST_CHECK_CLOSE_FRACTION 并指定公差限制为 0.0001。清单 10 给出了代码现在的样子。
清单 10. 有效的浮点比较
#define BOOST_TEST_MODULE floatingTest |
这段代码运行正常。现在,把 清单 10 中的公差限制改为 0.0000001。清单 11 给出了输出。