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

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

软件测试中测试用例详解

发布: 2010-4-26 09:50 | 作者: 网络转载 | 来源: 领测软件测试网 | 查看: 117次 | 进入软件测试论坛讨论

领测软件测试网

无返回值的方法,可以通过其他方法读取属性,也可以使用对象类型中的断言来判断属性的改变。

PHP代码
  1. /** 
  2.  * Unit类,有一个无返回值方法 
  3.  */  
  4. class Unit  
  5. {  
  6.     protected $name;  
  7.     /** 
  8.      * 设置name属性 
  9.      */  
  10.     public function setName($value)  
  11.     {  
  12.         $this->name = $value;  
  13.     }  
  14. }  
  15. ?>  
PHP代码
  1. require_once 'Unit.php';  
  2.   
  3. class UnitTest extends PHPUnit_Framework_TestCase  
  4. {  
  5.     /** 
  6.      * 测试无返回值的方法 
  7.      */  
  8.     public function testsetName()  
  9.     {  
  10.         $expected = 'Hello';  
  11.         $o = new Unit();  
  12.         $o->setName('Hello');  
  13.         $this->assertAttributeEquals($expected'name'$o);  
  14.     }  
  15. }  
  16. ?>  

编写测试

编写测试的原则是,尽可能测试每种不同的参数调用和不同的返回结果类型,既要测试成功的情况,也要测试失败的情况;无返回值的情况,要测试属性改变、输出内容、异常类型等;测试后记得要恢复现场。

在这里做了超出自己能力的事并不光荣。在你写某个函数之前,你只想让它做加法,但它却能做乘法,而且单元测试正确通过。我们来看看它是怎么做到的。

PHP代码
  1. /** 
  2.  * 计算器类 
  3.  */  
  4. class Calculator  
  5. {  
  6.     /** 
  7.      * 做加法运算 
  8.      * 
  9.      * @param  int  $a 
  10.      * @param  int  $b 
  11.      * @return int 
  12.      */  
  13.     public function add($a$b)  
  14.     {  
  15.         return $a * $b;  
  16.     }  
  17. }  
  18. ?> 
     
PHP代码
  1. require_once 'Calculator.php';  
  2.   
  3. class CalcuatorTest extends PHPUnit_Framework_TestCase  
  4. {  
  5.     public function testadd()  
  6.     {  
  7.         // 创建实例  
  8.         $c = new Calculator();  
  9.         $expected = 4;  
  10.         // 做加法  
  11.         $result = $c->add(2, 2);  
  12.         $this->assertEquals($expected$result);  
  13.     }  
  14. }  
  15. ?>  

合理的测试能帮助我们尽早发现错误。add()方法有两个参数,测试的时候用了两个值相同的参数。如果多做几次测试又太麻烦,对于这个测试我们按照科学的方法只需要一次。从概率学上讲,当你使用的参数差异越大时,结果相同的概率越低。

对于只有几个返回值的情况,要测试全部,如布尔类型。

PHP代码
  1. /** 
  2.  * File.php 
  3.  */  
  4.   
  5. /** 
  6.  * 在文件中写入数据并保存 
  7.  * 
  8.  * @param  string  $path 
  9.  * @param  string  $data 
  10.  * @return bool 
  11.  */  
  12. function Save($path$data)  
  13. {  
  14.     if (is_dir($path)) {  
  15.       return FALSE;  
  16.     }  
  17.   
  18.     return file_put_contents($path$data);  
  19. }  
  20. ?> 
     
PHP代码
  1. /** 
  2.  * FileTest.php 
  3.  */  
  4.   
  5. require_once 'File.php';  
  6.   
  7. class FileTest extends PHPUnit_Framework_TestCase  
  8. {  
  9.     /** 
  10.      * 测试保存文件 
  11.      */  
  12.     public function testSave()  
  13.     {  
  14.         $file = 'IamFile.txt';  
  15.         $dir = 'IamDir';  
  16.         mkdir($dir);  
  17.   
  18.         // 测试返回值为真的情况  
  19.         $this->assertTrue(Save($file'TestTrue'));  
  20.   
  21.         // 测试返回值为假的情况  
  22.         $this->assertFalse(Save($dir'TestFalse'));  
  23.   
  24.         // 恢复现场  
  25.         if (is_file($file)) {  
  26.           unlink($file);  
  27.         }  
  28.         rmdir($dir);  
  29.     }  
  30. }  
  31. ?>  

对于有多种类型返回值或不同参数的情况,分别测试每种类型和参数。下面是ThinkPHP源代码中的一个函数,有点复杂。这个例子不能单独运行,如需要请用SVN导出最新的ThinkPHP源代码(含单元测试)。

PHP代码
  1. /** 
  2.  * URL生成函数 
  3.  * 
  4.  * @param  string  $action  方法名 
  5.  * @param  string  $module  模块名 
  6.  * @param  string  $route   路由名 
  7.  * @param  array   $params  参数 
  8.  */  
  9. function url($action=ACTION_NAME,$module=MODULE_NAME,$route='',$app=APP_NAME,$params=array())  
  10. {  
  11.     if(C('DISPATCH_ON') && C('URL_MODEL')>0) {  
  12.         switch(C('PATH_MODEL')) {  
  13.             case 1:// 普通PATHINFO模式  
  14.                 $str    =   '/';  
  15.                 foreach ($params as $var=>$val)  
  16.                     $str .= $var.'/'.$val.'/';  
  17.                 $str = substr($str,0,-1);  
  18.                 if(!emptyempty($route)) {  
  19.                     $url    =   str_replace(APP_NAME,$app,).'/'.C('VAR_ROUTER').'/'.$route.'/'.$str;  
  20.                 }else{  
  21.                     $url    =   str_replace(APP_NAME,$app,).'/'.C('VAR_MODULE').'/'.$module.'/'.C('VAR_ACTION').'/'.$action.$str;  
  22.                 }  
  23.                 break;  
  24.             case 2:// 智能PATHINFO模式  
  25.                 $depr   =   C('PATH_DEPR');  
  26.                 $str    =   $depr;  
  27.                 foreach ($params as $var=>$val)  
  28.                     $str .= $var.$depr.$val.$depr;  
  29.                 $str = substr($str,0,-1);  
  30.                 if(!emptyempty($route)) {  
  31.                     $url    =   str_replace(APP_NAME,$app,).'/'.$route.$str;  
  32.                 }else{  
  33.                     $url    =   str_replace(APP_NAME,$app,).'/'.$module.$depr.$action.$str;  
  34.                 }  
  35.                 break;  
  36.         }  
  37.         if(C('HTML_URL_SUFFIX')) {  
  38.             $url .= C('HTML_URL_SUFFIX');  
  39.         }  
  40.     }else{  
  41.         $params =   http_build_query($params);  
  42.         if(!emptyempty($route)) {  
  43.             $url    =   str_replace(APP_NAME,$app,).'?'.C('VAR_ROUTER').'='.$route.'&'.$params;  
  44.         }else{  
  45.             $url    =   str_replace(APP_NAME,$app,).'?'.C('VAR_MODULE').'='.$module.'&'.C('VAR_ACTION').'='.$action.'&'.$params;  
  46.         }  
  47.     }  
  48.     return $url;  
  49. }  
  50. ?>  

延伸阅读

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

32/3<123>

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

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