【发布时间】:2015-05-19 16:19:42
【问题描述】:
我们将为 C 代码编写功能/单元测试。该 C 程序将作为嵌入式软件运行。但是我们需要在 Linux 环境中运行测试。
问题是被测试的部分代码如下所示:
我的地址.h:
#define MY_BASE_ADDRESS (0x00600000)
#define MY_OFFSET_ADDRESS (0x108)
my_code.c
#include "my_addresses.h"
static const My_Type* my_ptr =
(My_Type*)(MY_BASE_ADDRESS + MY_OFFSET_ADDRESS);
/* my_ptr is dereferenced and used ... */
显然,这不会在 Linux 主机环境中运行得那么好。
在测试期间有什么方法可以解决这个问题吗?我们能否以某种方式“重定向”程序以使用其他地址,即测试过程中分配的内存的有效地址?
我们的第一次尝试是在测试期间用另一个头文件替换“my_addresses.h”,该文件(extern)声明变量而不是硬定义 - 然后将 malloc 的内存分配给 MY_BASE_ADDRESS 等。问题是“ c 文件中的 static const" 声明。当然,您不能将变量分配给静态 const 类型。
我们最好不要修改被测代码(尽管在最坏的情况下可能会发生这种情况)。
【问题讨论】:
-
这实际上并不实用......我认为它首先不应该那样工作。为什么地址会被硬编码在标题中?您当前的问题是您通过不这样做避免的众多问题之一。要么将对象更改为 硬编码地址,要么更改对这些地址的使用以获取所需对象的真实位置。
-
@Eregrith 是的,这不切实际(至少对于主机测试而言)。但事情就是这样,我们无能为力。
-
应该是
static const My_Type * my_ptr?或者你有类似typedef M_Type_t * My_Type的东西吗? -
@PJTraill 是的,正确的。 “My_Type”应该是指向类型的指针的 typedef。更新问题以使情况更清楚(将其写为指向 My_Type 的指针)。
标签: c linux unit-testing memory-management functional-testing