让以下 C 函数
void underTest(){
static int i = 0;
i++;
if (i > 50*1000*1000) {
/* I want to test this */
}
}
我需要对该函数进行单元测试,包括 if block 。在我可以预见的解决方案中,有:
- 尽一切努力使用预期的接口(interface)来达到所有情况(包括在该示例中多次调用该函数),这可能是一个真正的麻烦
- 测试编译后读取内存映射以从其内存地址访问
i
- 修改目标代码
- 或者更改源代码并希望重新编译具有确定性
- 忘记测试并使用同行评审,考虑到成本,这并不是一个好的解决方案
注意:由于这是嵌入飞机的代码,对测试代表性要求非常高,任何形式的代码修改(包括#define static extern
伎俩)是 Not Acceptable 。此外,修改代码以消除问题(例如使 i
全局化)将花费大量资金。
有人知道解决这种恼人情况的窍门吗?不管它有多脏,只要源代码不受影响。
最佳答案
如果修改目标代码意味着修改生成的.elf,那么这将不起作用,因为i
是由加载程序在启动时分配的 em>...(肯定是我误解了,只是想澄清一下)。
加载后,您需要找出 .bss 部分中 i
变量的地址并直接访问它。您没有说明您正在使用哪个编译器,但是,例如,AFAIK gcc 具有扩展功能,可以在源代码级别和链接时指定变量/符号的地址,您的?
另一个解决方案是通过链接器脚本将 .bss 放置在已知地址。
关于c - 具有静态变量的 C 函数中的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49387056/