CuTest源码分析(3)——CuSuite
CuSuite结构体类型定义
位置:CuTest.h
源码:
typedef struct { int count;//数量 CuTest* list[MAX_TEST_CASES];//CuTest表 int failCount;//失败计数 } CuSuite;
宏定义:
//最大测试用例 #define MAX_TEST_CASES 1024 //添加TEST函数到测试组中 //#TEST:将TEST函数名字符串化操作,即#TEST变为"TEST" #define SUITE_ADD_TEST(SUITE,TEST) CuSuiteAdd(SUITE, CuTestNew(#TEST, TEST))
操作函数包含:
void CuSuiteInit(CuSuite* testSuite); CuSuite* CuSuiteNew(void); void CuSuiteDelete(CuSuite *testSuite); void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase); void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2); void CuSuiteRun(CuSuite* testSuite); void CuSuiteSummary(CuSuite* testSuite, CuString* summary); void CuSuiteDetails(CuSuite* testSuite, CuString* details);
操作函数定义位置:CuTest.c
源码分析:
//CuSuite初始化 void CuSuiteInit(CuSuite* testSuite) { testSuite->count = 0; testSuite->failCount = 0; memset(testSuite->list, 0, sizeof(testSuite->list)); }
//生成一个新的CuSuite //返回该结构体指针 CuSuite* CuSuiteNew(void) { CuSuite* testSuite = CU_ALLOC(CuSuite); CuSuiteInit(testSuite); return testSuite; }
//删除一个CuSuite结构体 //遍历list,释放所有CuTest内存空间 //释放CuSuite结构体内存空间 void CuSuiteDelete(CuSuite *testSuite) { unsigned int n; for (n=0; n < MAX_TEST_CASES; n++) { if (testSuite->list[n]) { CuTestDelete(testSuite->list[n]); } } free(testSuite); }
//向CuSuite的list中添加一个CuTest void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase) { assert(testSuite->count < MAX_TEST_CASES); testSuite->list[testSuite->count] = testCase; testSuite->count++; }
//将testSuite2添加到testSuite中 void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2) { int i; for (i = 0 ; i < testSuite2->count ; ++i) { CuTest* testCase = testSuite2->list[i]; CuSuiteAdd(testSuite, testCase); } }
//测试组运行 //遍历list //执行CuTestRun //测试用例失败标志置位,则失败计数递增加1 void CuSuiteRun(CuSuite* testSuite) { int i; for (i = 0 ; i < testSuite->count ; ++i) { CuTest* testCase = testSuite->list[i]; CuTestRun(testCase); if (testCase->failed) { testSuite->failCount += 1; } } }
//测试总结 void CuSuiteSummary(CuSuite* testSuite, CuString* summary) { int i; for (i = 0 ; i < testSuite->count ; ++i) { CuTest* testCase = testSuite->list[i];//扫描每一个测试case CuStringAppend(summary, testCase->failed ? "F" : ".");//如果失败就追加字符串"F",否则追加字符串"." } CuStringAppend(summary, "\n\n"); }
//测试细节 void CuSuiteDetails(CuSuite* testSuite, CuString* details) { int i; int failCount = 0; if (testSuite->failCount == 0)//如果没有测试失败的 { int passCount = testSuite->count - testSuite->failCount;//计算测试通过的数量 const char* testWord = passCount == 1 ? "test" : "tests";//只有一个测试用例,显示test,否则显示tests CuStringAppendFormat(details, "OK (%d %s)\n", passCount, testWord); } else { if (testSuite->failCount == 1)//失败个数为1 CuStringAppend(details, "There was 1 failure:\n"); else CuStringAppendFormat(details, "There were %d failures:\n", testSuite->failCount); for (i = 0 ; i < testSuite->count ; ++i) { CuTest* testCase = testSuite->list[i];//扫描每一个测试case if (testCase->failed)//判断是否失败 { failCount++; CuStringAppendFormat(details, "%d) %s: %s\n", failCount, testCase->name, testCase->message);//追加测试失败的测试用例的名字和信息 } } CuStringAppend(details, "\n!!!FAILURES!!!\n"); CuStringAppendFormat(details, "Runs: %d ", testSuite->count);//测试个数 CuStringAppendFormat(details, "Passes: %d ", testSuite->count - testSuite->failCount);//成功个数 CuStringAppendFormat(details, "Fails: %d\n", testSuite->failCount);//失败个数 } }

浙公网安备 33010602011771号