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

单元测试ASSERT_EQ断言时指针指向内存地址而非对象的问题

单元测试ASSERT_EQ报错分析

问题场景

运行单元测试代码:

ASSERT_EQ(mifid_trade_report.contingent_transaction_flag, "CONT");

得到错误输出:

/home/.../test_protocol.cpp:2075: Failure
Expected equality of these values:
  mifid_trade_report.contingent_transaction_flag
    Which is: 
  "CONT"
    Which is: 0x563717b6bffe

问题1解答

你的理解有误。错误信息的实际含义是:

  • mifid_trade_report.contingent_transaction_flag的值为空(显示为空行,说明是未初始化的指针或空指针)
  • "CONT"是C++字符串字面量,会被隐式转换为const char*类型,0x563717b6bffe是该字符串字面量在内存中的存储地址。

ASSERT_EQ在此处执行的是指针地址的比较,而非字符串内容的比较。

问题2解答

显示内存地址的核心原因是比较的是指针而非字符串内容:

  • 如果contingent_transaction_flag是std::string类型,ASSERT_EQ会调用字符串的重载比较运算符,直接对比内容;但从错误信息看,它的类型大概率是const char*,且未正确初始化(为空指针或野指针)。
  • 其他测试正常,是因为那些测试中对应的变量要么是std::string类型,要么是已正确指向有效字符串的const char*指针,而当前测试里的contingent_transaction_flag未被正确赋值,导致指针为空。

修复建议:如果是C风格字符串,改用ASSERT_STREQ来比较内容;如果是std::string类型,检查contingent_transaction_flag是否被正确初始化或赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:17:14