白盒测试实例--9构建自己的单元测试框架2(完整代码)

来源:互联网 发布:南京哪里有mac专柜 编辑:程序博客网 时间:2024/05/17 02:06

原创文章,版权归 胡添发(hutianfa@163.com)所有,转载请注明出处:
http://blog.csdn.net/aidisheng/archive/2008/09/06/2892744.aspx

 

完整的源代码如下:

1、UnitTest.h

  1. /*
  2.  * Copyright (c) 2008, 胡添发(hutianfa@163.com)
  3.  * 
  4.  * 简单的单元测试框架
  5.  *
  6.  */
  7. #include<stdio.h>
  8. #include<string.h>
  9. #include<time.h>
  10. #include<stdlib.h>
  11. /*
  12.  * VC中没有sleep函数,自己写一个
  13.  * wait单位是毫秒
  14.  */
  15. extern void sleep(clock_t wait);
  16. /*
  17.  * 判断是否取值为真
  18.  */
  19. void assertTrue(char *msg, bool actual);
  20. /*
  21.  * 判断预期结果和实际结果是否相符
  22.  */
  23. void assertEquals(char *msg, int expect, int actual);
  24. /*
  25.  * 初始化测试,开始计时
  26.  */
  27. void init();
  28. /*
  29.  * 结束测试,结束计时,打印报告
  30.  */
  31. void end();

        2、UnitTest.cpp

  1. /*
  2.  * Copyright (c) 2008, 胡添发(hutianfa@163.com)
  3.  * 
  4.  * 简单的单元测试框架
  5.  *
  6.  */
  7. #include "UnitTest.h"
  8. /*
  9.  * VC中没有sleep函数,自己写一个
  10.  * wait单位是毫秒
  11.  */
  12. void sleep(clock_t wait) 
  13.     clock_t goal; 
  14.     goal = wait + clock(); 
  15.     while( goal > clock() ) 
  16.     {
  17.         ; 
  18.     }
  19. /*
  20.  * 存放测试信息和错误信息的全局变量
  21.  */
  22. char *errors[100] = {""};
  23. int errorCount = 0;
  24. int testCount=0;
  25. time_t startTime, endTime;
  26. /*
  27.  * 添加错误信息
  28.  */
  29. void addError(char *msg)
  30. {
  31.     char error[100] = "Test '";
  32.     strcat(error, msg);
  33.     strcat(error, "' is failed!");
  34.     errors[errorCount] = new char[100];
  35.     strcpy(errors[errorCount], error);
  36.     errorCount ++;
  37. }
  38. /*
  39.  * 添加错误信息,带预期结果与实际结果参数
  40.  */
  41. void addError(char *msg, int expect, int actual)
  42. {
  43.     char error[100] = "Test '";
  44.     char num[10];
  45.     strcat(error, msg);
  46.     strcat(error, "' is failed!");
  47.     strcat(error, " Expected: ");
  48.     strcat(error, itoa(expect, num, 10));
  49.     strcat(error, " , actual: ");
  50.     strcat(error, itoa(actual, num, 10));
  51.     errors[errorCount] = new char[100];
  52.     strcpy(errors[errorCount], error);
  53.     errorCount ++;
  54. }
  55. /*
  56.  * 判断是否取值为真
  57.  */
  58. void assertTrue(char *msg, bool actual)
  59. {
  60.     sleep(10);
  61.     testCount++;
  62.     if(actual)
  63.     {
  64.         printf(".");
  65.     }
  66.     else
  67.     {
  68.         printf("F");
  69.         addError(msg);
  70.     }
  71. }
  72. /*
  73.  * 判断预期结果和实际结果是否相符
  74.  */
  75. void assertEquals(char *msg, int expect, int actual)
  76. {
  77.     sleep(10);
  78.     testCount++;
  79.     if(expect == actual)
  80.     {
  81.         printf(".");
  82.     }
  83.     else
  84.     {
  85.         printf("F");
  86.         addError(msg, expect, actual);
  87.     }
  88. }
  89. /*
  90.  * 测试报告
  91.  */
  92. void testReport()
  93. {
  94.     printf("/n/nTotal run Tests:");  //测试概要信息
  95.     printf("%d", testCount);
  96.     printf(", passed:%d", testCount-errorCount);
  97.     printf(", failed:%d/n", errorCount);
  98.     printf("Test escaped time: %6.3f seconds/n", (double)(endTime-startTime)/1000.0);
  99.     if(errorCount>0)   //测试失败的详细信息
  100.     {
  101.         printf("/n**************** Failed Test's Detail ****************/n/n");
  102.         
  103.         for(int i=0; i<errorCount; i++)
  104.         {
  105.             printf("  %d: ", i+1);
  106.             printf(errors[i]);
  107.             printf("/n");
  108.         }
  109.         printf("/n**************** End of Failed Detail ****************/n/n");
  110.     }
  111.     else   //所有测试都通过
  112.     {
  113.         printf("/n****** All Tests had Passed! ******/n/n");
  114.     }
  115. }
  116. /*
  117.  * 初始化测试,开始计时
  118.  */
  119. void init()
  120. {
  121.     printf("/n****** Test start ******/n");
  122.     startTime = clock();
  123. }
  124. /*
  125.  * 结束测试,结束计时,打印报告
  126.  */
  127. void end()
  128. {
  129.     endTime = clock();
  130.     testReport();
  131. }

        3、实际测试结果截图:

原创粉丝点击