如何在BOOST_DATA_TEST_CASE_F中设置全局测试容差?
在Boost 1.72的BOOST_DATA_TEST_CASE_F中设置全局容差的方法
方法1:在测试夹具中注入容差配置
直接修改你的my_fixture类,在构造函数里给当前测试单元添加容差装饰器,所有基于该夹具的BOOST_DATA_TEST_CASE_F测试都会自动应用容差:
#include <boost/test/unit_test.hpp> namespace utf = boost::unit_test; struct my_fixture { my_fixture() { auto& current_test = utf::framework::current_test_case(); current_test.add_decorator(utf::tolerance(0.01)); } }; // 使用示例 BOOST_DATA_TEST_CASE_F(my_fixture, test_case_name, dataset, var1, var2) { BOOST_TEST(var1 == var2); // 自动应用0.01的容差 }
方法2:封装带容差的测试宏
如果不想修改夹具,可以自定义宏替代BOOST_TEST,统一注入容差参数:
#define BOOST_TEST_TOL(expr) BOOST_TEST(expr, *utf::tolerance(0.01)) // 使用示例 BOOST_DATA_TEST_CASE_F(my_fixture, test_case_name, dataset, var1, var2) { BOOST_TEST_TOL(var1 == var2); // 替代原BOOST_TEST,自动带容差 }
方法3:全局设置测试模块容差
如果整个测试模块的所有测试都需要统一容差,可在测试模块初始化时全局配置:
#include <boost/test/unit_test.hpp> namespace utf = boost::unit_test; BOOST_TEST_MODULE(MyTestSuite) { utf::framework::master_test_suite().add_decorator(utf::tolerance(0.01)); } // 所有BOOST_TEST(包括BOOST_DATA_TEST_CASE_F中的)都会自动应用容差 BOOST_DATA_TEST_CASE_F(my_fixture, test_case_name, dataset, var1, var2) { BOOST_TEST(var1 == var2); }
内容的提问来源于stack exchange,提问作者clocksw
相关产品推荐
相关产品推荐

