代码的单元测试是一个运行被测代码并且将实际输出与期望输出进行比较的过程,本文使用一个简单的例子记录代码测试的基本想法。
typedef struct
{
int output;
int a;
int b;
int(*unit_test)();
}ST_UNITTEST_T;
创建一个单元测试,包含两个输入一个输出以及一个指向被测函数的函数指针
// add a test
ST_UNITTEST_T *addTestFun(int(*TestFun)(int, int), int a, int b, int output)
{
ST_UNITTEST_T *testobj = (ST_UNITTEST_T * )malloc(sizeof(ST_UNITTEST_T));
testobj->a = a;
testobj->b = b;
testobj->output = output;
testobj->unit_test = TestFun;
return testobj;
}
通过该函数初始化一个测试结构体,传入被测函数的指针、输入、期望输出
// user function to be tested
int add(int a, int b)
{
return a + b;
}
创建一个被测函数,该函数包含两个输入一个输出
// run test: call object function to be tested and compare results
void runTest(ST_UNITTEST_T *ptest)
{
if (NULL != ptest)
{
int count = ptest->unit_test(ptest->a, ptest->b);
if (count == ptest->output)
{
printf("success!\n");
}
else
{
printf("failed %d != %d \n", count, ptest->output);
}
free(ptest);
}
}
创建一个函数执行单元测试,调用被测函数并且将实际运行结果和期望结果比较,打印输出
void main()
{
ST_UNITTEST_T *stCase1;
stCase1 = addTestFun(add, 1, 2, 5);
runTest(stCase1);
}
在main函数中执行我们的单元测试
failed 3 != 5
请按任意键继续. . .
测试完成