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

VS中C++ UnitTest单元测试预期与实际值一致却判定失败问题

问题原因

  • 核心是浮点数精度对比的特性:double 类型属于浮点数值,经过多次算术运算后会产生微小的精度误差,CppUnitTestFramework 的 Assert::AreEqual 对比浮点数时默认要求两个值完全相等才会判定测试通过,微小的精度差就会触发断言失败。
  • 测试框架的报错UI只会截断展示前6位有效数字,因此你肉眼看到的预期值和实际值完全一致,但两者在第7位及之后的小数位存在差异,这才是断言失败的真实原因。

修复方案

调用 Assert::AreEqual 时传入第三个参数作为允许的误差阈值(容差),容差的大小可以根据你需要的校验精度调整,示例修改代码如下:

TEST_METHOD(TestMethod1)
{
    double t, g;
    g = 1;
    t = p(p(1 - 2 * g) + pow(p(1 - p(1) + (p(2 * g) * p(2 * g))), 2));
    // 1e-6 代表允许前后6位小数一致即可通过校验
    Assert::AreEqual(t, 0.320469, 1e-6);
}

如果需要更高精度的校验,对应调整容差即可,比如要求8位小数一致就把容差改为 1e-8。

内容的提问来源于stack exchange,提问作者Olena

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:45:04