• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

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

发布: 2010-8-04 09:58 | 作者: 网络转载 | 来源: 领测软件测试网采编 | 查看: 156次 | 进入软件测试论坛讨论

领测软件测试网

先来说一下我对于单元测试的认识吧,我觉得有三种情况:
一是输入输出为值,且与数据库无关
二是输入输出为值,且与数据库有关
三是输入输出不是值的情况
第一种情况常见于控制类,它的方法,一般情况下,参数就是输入值,返回值就是输出值,此时输出值只受输入值的影响
第二种情况常见于实体类,它的方法,一般情况下,与控制类的方法相同,但是输出值不只是受输入值的影响,同时还受当前数据库的内容影响。
第三种情况常见于边界类(一般就是界面,不知道我这样理解对不对),一般情况下,它的方法是系统定义的方法,虽然也有参数和返回值,但是对开发人员来说并不是很重要,有时甚至不用。如界面中一个按钮的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()就没有错误。因此,从测试角度来看,被测函数调用其他函数(称为底层函数)所取得的数据,完全可以和通过参数传递的数据同等对待,都是一种输入,称为内部输入。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: 单元 输入 谈论

21/212>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网