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();//执行所有测试
}

  

 

  

posted @ 2020-05-03 20:37  hifish  阅读(30)  评论(0)    收藏  举报