以下是我写的几点有关谈论单元测试的内部输入问题,大家参考一下

发表于:2010-08-04来源:作者:点击数: 标签:单元输入
先来说一下我对于 单元测试 的认识吧,我觉得有三种情况: 一是输入输出为值,且与 数据库 无关 二是输入输出为值,且与数据库有关 三是输入输出不是值的情况 第一种情况常见于控制类,它的方法,一般情况下,参数就是输入值,返回值就是输出值,此时输出值

先来说一下我对于单元测试的认识吧,我觉得有三种情况:
一是输入输出为值,且与数据库无关
二是输入输出为值,且与数据库有关
三是输入输出不是值的情况
第一种情况常见于控制类,它的方法,一般情况下,参数就是输入值,返回值就是输出值,此时输出值只受输入值的影响
第二种情况常见于实体类,它的方法,一般情况下,与控制类的方法相同,但是输出值不只是受输入值的影响,同时还受当前数据库的内容影响。
第三种情况常见于边界类(一般就是界面,不知道我这样理解对不对),一般情况下,它的方法是系统定义的方法,虽然也有参数和返回值,但是对开发人员来说并不是很重要,有时甚至不用。如界面中一个按钮的clicked事件。
对应于上面的三种情况,测试也有不同。
对于第一种情况,比较好办,在设计这个类时,就可以写出测试用例,包括具体的输入值和期望输出。
对于第二种情况,在写测试用例时,就必须先假定数据库中相应表的数据值,但是在真正测试时,并不能保证数据库中的真实数据就是我假定的数据,这种情况下,就需要测试人员去查看数据库的当前内容,就有些麻烦。
对于第三种情况,我根本就不知道怎么去写测试用例。如一个按钮的clicked事件,其中有很多步骤,受影响的部分可能也有很多,这些情况在设计时都已经有说明了,如果对照着设计文档,应该是可以测试的,但要写测试用例,我就不知从何下手,总不能从设计文档中抄一遍吧。这种情况下,我现在的观点是不写测试用例,让测试人员直接看设计文档进行测试。
以上是我的拙见,不知道这种分类是否科学,另外,对于我说的第二种情况和第三种情况,各位有何高见

以下是我写的几点有关谈论单元测试的内部输入问题,大家可以参考

内部输入是函数内部获得的输入,包括调用子函数获得的输入和局部静态变量。请看下面的两组功能完全一样代码(差异部分用粗体标出):

代码一(代码清单4.1.cpp):

//计算圆的外接正方形的面积
int GetArea(int r)
{
    return (r+r) * (r+r);
}

//判断指定的正方形是否可以容纳圆
//参数int r:圆的半径
//参数int x:指定正方形边长
//返回值:不能容纳,返回-1;正好可以容纳,返回0;有多余空间,返回1
int Compare(int r, int x)
{
       int a1 = GetArea(r);
       int a2 = x*x;
       
        if(a1 == a2)
                return 0;

        if(a1 < a2)
                return 1;

        return -1;
}

//调用compare
int Func(int r, int x)
{
        int result = Compare(r, x);
        printf("result %d\n", result);
        return result;
}

代码二(代码清单4.2.cpp):

//计算圆的外接正方形的面积
int GetArea(int r)
{
        return (r+r) * (r+r);
}

//判断指定的正方形是否可以容纳圆
//参数int a1:圆的外接正方形的面积
//参数int x:指定正方形边长
//返回值:不能容纳,返回-1;正好可以容纳,返回0;有多余空间,返回1
int Compare(int a1, int x)
{
        int a2 = x*x;
       
        if(a1 == a2)
                return 0;

        if(a1 < a2)
                return 1;

        return -1;
}

//调用compare
int Func(int r, int x)
{
       int a1 = GetArea(r);
        int result = Compare(a1, x);
        printf("result %d\n", result);
        return result;
}

两组代码的差别在对GetArea()的调用是在Compare()之内还是之外。假如我们的测试目标是Comapre(),圆的外接正方形的面积a1在代码一中通过调用Compare()取得,在代码二中通过参数传递,显然,两者之间并无本质区别。Compare()的功能是,计算指定正方形的面积后并与外接正方形面积比较,GetArea()只是一个取得数据的调用,GetArea()本身是否正确,不是我们的测试目标,测试目标在于:对参数输入和 GetArea()的各种输出是否做了合适的计算,只要这些计算正确,Comapre()就没有错误。因此,从测试角度来看,被测函数调用其他函数(称为底层函数)所取得的数据,完全可以和通过参数传递的数据同等对待,都是一种输入,称为内部输入。

原文转自:http://www.ltesting.net