前段时间项目组相对很久以前的工程做单元测试,由于比较久远内部逻辑复杂,外部依赖都比较多,所以想通过打桩的方式(不但要对外部接口还得可以对内部函数)进行函数级别的单元测试。调查了几个方法记录一下,以备以后参照。
- google的cmockery框架实现
优点很多,请大家自行google。
但cmockery不能对内部函数进行打桩,所以不满足我们要求。
- 利用C编译器预编译的特点,通过宏定义实现
利用C编译器的预编译特点,通过宏定义替换需要打桩的函数。直接上代码。
main.c
#include "test.h"
// 把func1替换成func1_stub_行号
#define func1 func1_(__LINE__)
#define func1_(line) func1__(line)
#define func1__(line) func1_stub_ ## line
// 把func2替换成func2_stub_行号
#define func2 func2_(__LINE__)
#define func2_(line) func2__(line)
#define func2__(line) func2_stub_ ## line
//test函数中func1为第5行
void func1_stub_5(void)
{
printf("func1_stub\n");
}
//test函数中func1为第6行
void func2_stub_6(void)
{
printf("func2_