【发布时间】:2017-12-16 18:06:55
【问题描述】:
我正在为一些函数宏编写单元测试,它们只是一些函数调用的包装器,并包含一些内部维护。
我整个上午都在写测试,我的大脑开始变得乏味,所以这可能只是一个隧道视觉的例子,但是:
对于宏扩展的单元测试是否有有效的案例?我的意思是检查是否为函数宏参数的各种源代码形式生成了正确的函数行为。例如,函数参数可以采用以下形式,在源代码中:
- 字面意思
- 变量
- 运算符表达式
- 结构成员访问
- 指向结构成员的访问权限
- 指针解引用
- 数组索引
- 函数调用
- 宏展开
- (请随时指出我遗漏的任何内容)
如果宏没有正确展开,那么代码通常甚至无法编译。那么,如果参数是float 字面量或float 变量,或者函数调用的结果,那么在不同的单元测试中是否还有任何明智之处?
扩展应该是单元测试的一部分吗?
【问题讨论】:
-
当然,如果您忘记在宏参数的每个实例周围加上括号。否则,没有那么多。但实际上,这主要是一个意见问题,或者至少是一个个案决定。
-
使用诸如
value & 1之类的表达式可能会表明宏是粗心的,但代码检查也可以做到这一点。我认为通过全套测试是矫枉过正的。乏味是给你一个相关的警告。 -
@JonathanLeffler:是的,有时我必须注意自己。我进入了覆盖边缘案例的凹槽并勾选了所有框,如果我不小心的话,我会最终编写测试来涵盖日食和火星入侵。
标签: c unit-testing macros