【问题标题】:How to mock constants in Google mock?如何在 Google mock 中模拟常量?
【发布时间】:2026-01-26 16:40:01
【问题描述】:
Variable.h
....
#define BLAH = "blahstring"
.....

嗨, 我们如何在#define 下模拟一个变量? Google mock docs 主要讨论方法和对象,而不是模拟常量。最接近我能想到的将调用委托给假类让它返回测试值。

我有带有变量列表的头文件,我想模拟它,以便在测试中调用 BLAH 时,我得到“mockblahstring”而不是“blahstring”。

任何示例代码都会有所帮助。

谢谢。

【问题讨论】:

  • 使用#undef,您可能会更改宏定义 - 请参阅*.com/questions/9274500/…。但是,它可能对已编译的文件和您的更改不可见的文件没有影响。对您的问题的坦率回答是:不要那样做 - 在进行单元测试时更改常量没有多大意义......

标签: c++ unit-testing googlemock gmock


【解决方案1】:

#define 不是常量

这是一个(请参阅here 进一步阅读)。编译器在任何 gmock 库得到“它的手指”之前就开始并替换所有出现的 ma​​cro

换句话说:您的编译对象不包含任何 BLAH“对象”。它只包含您写下 BLAH 的所有地方的相应字符串。

从这个意义上说:没有办法嘲笑根本不存在的“实体”。

真正的答案是:这就是为什么您绝对不应该将预处理器宏用作“常量”的众多原因之一。因为,它们不是常数!仍然有它们有意义的地方,但绝对不能替代 constants

从这个意义上说:在做任何其他事情之前,您最好退后一步,了解这些基本要素。

【讨论】: