让以下C函数
void underTest(){
static int i = 0;
i++;
if (i > 50*1000*1000) {
/* I want to test this */
}
}
我需要对这个函数进行单元测试,包括if块。在我可以预见的解决方案中,有:
i
注意:因为这是嵌入飞机的代码,对测试代表性有很高的要求,任何形式的代码修改(包括#define static extern
技巧)都是不可接受的。此外,修改代码以消除问题(例如,使i
全局化)将花费成本。
有人知道这种烦人的情况吗?无论它多么脏,只要源代码不受影响。
答案 0 :(得分:1)
如果通过修改对象代码意味着修改生成的.elf,那么由于启动时的加载程序分配了i
,这将无效。 ..(当然我误解了它,只想澄清它)。
您需要在加载后找到.bss部分中i
变量的地址并直接访问它。你没有说你正在使用哪个编译器,但是,例如,AFAIK gcc有扩展来指定源代码级别和链接时的变量/符号的地址,你的?
另一个解决方案是通过链接描述文件将.bss放在已知地址。
答案 1 :(得分:0)
重构代码以使其可测试。 变换
void underTest(){
static int i = 0;
i++;
if (i > 50*1000*1000) {
/* I want to test this */
}
}
到
void alsoUnderTest(){
/* I want to test this */
}
void underTest(){
static int i = 0;
i++;
if (i > 50*1000*1000) {
alsoUnderTest()
}
}