CuTest源码分析(2)——CuTest
CuTest结构体类型定义
位置:CuTest.h
源码:
struct CuTest { char* name;//名称 TestFunction function;//函数指针 int failed;//失败标志 int ran;
const char* message;//信息 jmp_buf *jumpBuf;//程序上下文信息指针 };
宏定义及函数指针声明:
#define CU_ALLOC(TYPE) ((TYPE*) malloc(sizeof(TYPE))) typedef struct CuTest CuTest; typedef void (*TestFunction)(CuTest *);
操作函数包含:
void CuTestInit(CuTest* t, const char* name, TestFunction function); CuTest* CuTestNew(const char* name, TestFunction function); void CuTestRun(CuTest* tc); void CuTestDelete(CuTest *t);
操作函数定义位置:CuTest.c
源码分析:
//CuTest初始化 void CuTestInit(CuTest* t, const char* name, TestFunction function) { t->name = CuStrCopy(name); t->failed = 0; t->ran = 0; t->message = NULL; t->function = function; t->jumpBuf = NULL; }
//生成一个新的CuTest结构体 //返回该结构体指针 CuTest* CuTestNew(const char* name, TestFunction function) { CuTest* tc = CU_ALLOC(CuTest); CuTestInit(tc, name, function); return tc; }
//执行函数 void CuTestRun(CuTest* tc) { jmp_buf buf;//用于保存当前程序上下文信息的缓冲区 tc->jumpBuf = &buf;//jumpBuf指向该程序上下文信息的缓冲区 //setjmp宏用于保存当前程序上下文信息到jmp_buf类型缓冲区中 //直接调用该宏,直接返回0 //通过longjmp函数跳转至该宏,该宏返回非零值 if (setjmp(buf) == 0) { tc->ran = 1; (tc->function)(tc);//调用CuTest中的函数指针指向的函数 } tc->jumpBuf = 0;//指针清零 }
//删除一个CuTest结构体 //释放名字和结构体内存空间 void CuTestDelete(CuTest *t) { if (!t) return; free(t->name); free(t); }

浙公网安备 33010602011771号