(九)白盒测试实例--构建自己的单元测试框架2
完整的源代码如下:
1、UnitTest.h
- /*
- * Copyright (c) 2008, 胡添发([email protected])
- *
- * 简单的单元测试框架
- *
- */
- #include<stdio.h>
- #include<string.h>
- #include<time.h>
- #include<stdlib.h>
- /*
- * VC中没有sleep函数,自己写一个
- * wait单位是毫秒
- */
- extern void sleep(clock_t wait);
- /*
- * 判断是否取值为真
- */
- void assertTrue(char *msg, bool actual);
- /*
- * 判断预期结果和实际结果是否相符
- */
- void assertEquals(char *msg, int expect, int actual);
- /*
- * 初始化测试,开始计时
- */
- void init();
- /*
- * 结束测试,结束计时,打印报告
- */
- void end();
2、UnitTest.cpp
- /*
- * Copyright (c) 2008, 胡添发([email protected])
- *
- * 简单的单元测试框架
- *
- */
- #include "UnitTest.h"
- /*
- * VC中没有sleep函数,自己写一个
- * wait单位是毫秒
- */
- void sleep(clock_t wait)
- {
- clock_t goal;
- goal = wait + clock();
- while( goal > clock() )
- {
- ;
- }
- }
- /*
- * 存放测试信息和错误信息的全局变量
- */
- char *errors[100] = {""};
- int errorCount = 0;
- int testCount=0;
- time_t startTime, endTime;
- /*
- * 添加错误信息
- */
- void addError(char *msg)
- {
- char error[100] = "Test '";
- strcat(error, msg);
- strcat(error, "' is failed!");
- errors[errorCount] = new char[100];
- strcpy(errors[errorCount], error);
- errorCount ++;
- }
- /*
- * 添加错误信息,带预期结果与实际结果参数
- */
- void addError(char *msg, int expect, int actual)
- {
- char error[100] = "Test '";
- char num[10];
- strcat(error, msg);
- strcat(error, "' is failed!");
- strcat(error, " Expected: ");
- strcat(error, itoa(expect, num, 10));
- strcat(error, " , actual: ");
- strcat(error, itoa(actual, num, 10));
- errors[errorCount] = new char[100];
- strcpy(errors[errorCount], error);
- errorCount ++;
- }
- /*
- * 判断是否取值为真
- */
- void assertTrue(char *msg, bool actual)
- {
- sleep(10);
- testCount++;
- if(actual)
- {
- printf(".");
- }
- else
- {
- printf("F");
- addError(msg);
- }
- }
- /*
- * 判断预期结果和实际结果是否相符
- */
- void assertEquals(char *msg, int expect, int actual)
- {
- sleep(10);
- testCount++;
- if(expect == actual)
- {
- printf(".");
- }
- else
- {
- printf("F");
- addError(msg, expect, actual);
- }
- }
- /*
- * 测试报告
- */
- void testReport()
- {
- printf("\n\nTotal run Tests:"); //测试概要信息
- printf("%d", testCount);
- printf(", passed:%d", testCount-errorCount);
- printf(", failed:%d\n", errorCount);
- printf("Test escaped time: %6.3f seconds\n", (double)(endTime-startTime)/1000.0);
- if(errorCount>0) //测试失败的详细信息
- {
- printf("\n**************** Failed Test's Detail ****************\n\n");
- for(int i=0; i<errorCount; i++)
- {
- printf(" %d: ", i+1);
- printf(errors[i]);
- printf("\n");
- }
- printf("\n**************** End of Failed Detail ****************\n\n");
- }
- else //所有测试都通过
- {
- printf("\n****** All Tests had Passed! ******\n\n");
- }
- }
- /*
- * 初始化测试,开始计时
- */
- void init()
- {
- printf("\n****** Test start ******\n");
- startTime = clock();
- }
- /*
- * 结束测试,结束计时,打印报告
- */
- void end()
- {
- endTime = clock();
- testReport();
- }
3、实际测试结果截图: