CuTest源码分析(5)——示例
//对CuStringNew函数进行单元测试
//该函数功能是生成一个CuString结构体,并返回该结构体指针
//该结构体成员都被初始化为默认值
//对默认值进行检查比对,可得知CuStringNew函数是否按预期执行
void TestCuStringNew(CuTest* tc)
{
CuString* str = CuStringNew();
CuAssertTrue(tc, 0 == str->length);
CuAssertTrue(tc, 0 != str->size);
CuAssertStrEquals(tc, "", str->buffer);
}
//对CuStringAppend函数进行单元测试
//该函数功能是追加字符串
//此处先追加"hello"字符串
//再判断是否追加成功
//再追加" world"字符串
//再判断字符串是否为"hello world"
void TestCuStringAppend(CuTest* tc)
{
CuString* str = CuStringNew();
CuStringAppend(str, "hello");
CuAssertIntEquals(tc, 5, str->length);
CuAssertStrEquals(tc, "hello", str->buffer);
CuStringAppend(str, " world");
CuAssertIntEquals(tc, 11, str->length);
CuAssertStrEquals(tc, "hello world", str->buffer);
}
新建两个测试用例,返回CuSuite指针:
CuSuite* CuStringGetSuite(void)
{
CuSuite* suite = CuSuiteNew();
SUITE_ADD_TEST(suite, TestCuStringNew);
SUITE_ADD_TEST(suite, TestCuStringAppend);
return suite;
}
//对CuTestNew函数进行单元测试
//该函数功能是生成一个CuTest结构体,并返回该结构体指针
//该结构体成员都被初始化为默认值
//对默认值进行检查比对,可得知CuTestNew函数是否按预期执行
void TestCuTestNew(CuTest* tc)
{
CuTest* tc2 = CuTestNew("MyTest", TestPasses);
CuAssertStrEquals(tc, "MyTest", tc2->name);
CuAssertTrue(tc, !tc2->failed);
CuAssertTrue(tc, tc2->message == NULL);
CuAssertTrue(tc, tc2->function == TestPasses);
CuAssertTrue(tc, tc2->ran == 0);
CuAssertTrue(tc, tc2->jumpBuf == NULL);
}
//对CuAssertIntEquals函数进行单元测试
//该函数功能如果传入的两个数值相等,则直接返回
//若不相等,则产生一条message信息
//此处传入不同的两个数值42和32
//比对产生的message与"expected <42> but was <32>"是否一致
void TestAssertIntEquals(CuTest* tc)
{
jmp_buf buf;
CuTest *tc2 = CuTestNew("TestAssertIntEquals", zTestFails);
const char* expected = "expected <42> but was <32>";
tc2->jumpBuf = &buf;
if (setjmp(buf) == 0)
{
CuAssertIntEquals(tc2, 42, 32);
}
CuAssertTrue(tc, tc2->failed);
CompareAsserts(tc, "CuAssertIntEquals failed", expected, tc2->message);
}
新建两个测试用例,返回CuSuite指针:
CuSuite* CuGetSuite(void)
{
CuSuite* suite = CuSuiteNew();
SUITE_ADD_TEST(suite, TestCuTestNew);
SUITE_ADD_TEST(suite, TestAssertIntEquals);
return suite;
}
//执行所有测试
void RunAllTests(void)
{
CuString *output = CuStringNew();
CuSuite* suite = CuSuiteNew();
CuSuiteAddSuite(suite, CuGetSuite());
CuSuiteAddSuite(suite, CuStringGetSuite());
CuSuiteRun(suite);//执行测试
CuSuiteSummary(suite, output);//将执行结果概要信息写入output中
CuSuiteDetails(suite, output);//将执行结果细节信息写入output中
printf("%s\n", output->buffer);//输入output
}
//main函数
int main(void)
{
RunAllTests();//执行所有测试
}

浙公网安备 33010602011771号