现在说单元测试,那么什么是单元测试呢?单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
  课堂上王老师给了我们一个例子。查找list[]中的大值:int Largest(int list[], int length);并给出了测试函数的代码:

 

int Largest(int list[],int length)
{
int i,max;
for(i=0;i<length-1;i++)
{
if(list[i]>max)
{
max=list[i];
}
}
return max;
}

  当然这个函数是有一定的小小的问题的!通过对程序的编写以及编译,其中的错误是i的范围有误,且没有给max定义初值。前面的那个问题课堂上是找到了,但是同样我和我同桌蔡都没有想到为max定义一个初值。(这是一个程序员不应该有的问题)歪打正着的测试了几组数据竟然是正确的。{2,4 6,0}大值是6。又测试了另外一组{-1,-7,-3 ,0}大的数为0,{-7,3,45,0,-2}大的数为45,王老师在不停的说,输入的数组为空怎样处理,数组中的数有浮点数怎么办,若输入的是字符怎么办,这个函数还可以满足性能要求吗,答案当然是否定的。所以课下我对这个函数又进行了修改。代码如下:

 

1 int Largest(int list[],int length)
2 {
3     int i,max;
4     max=list[0];
5     bool bRet = cin.good();
6     if(list==NULL)
7     {
8         cout<<"数组不能为空!"<<endl;
9         exit(-1);
10     }
11     else if(length==0)
12     {
13         cout<<"数组长度不能为零!"<<endl;
14         exit(-1);
15     }
16     else if(!bRet)
17     {
18         cout<<"您输入的有误,必须输入整数!"<<endl;
19         exit(-1);
20     }
21     else
22     {
23         for(i=0;i<=length-1;i++)
24         {
25             if(list[i]>max)
26             {
27                 max=list[i];
28             }
29         }
30         return max;
31     }
  }

  这样上述的问题都得到了解决。bool bRet = cin.good()函数是用来判断从键盘输入的数据是不是与定义的整型数据相同(输入的类型包括浮点型与字符型)。只要用户输入的数据有上述问题都会有相应的提示。
  其实单元测试是很重要的,像盖楼房一样,如果每块砖都是不合格的,那么整栋楼的质量也不能保证了。只有我们把每个函数或者模块的功能做好,整个工程的bug才会越来越少。(真是受益匪浅啊!)把单元测试做好了,会大大地节省我们的调试程序的时间。所以有必要对这方面提起重视来。