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);//失败个数
    }
}

 

posted @ 2020-05-03 16:28  hifish  阅读(32)  评论(0)    收藏  举报