You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:55:23