1 单元测试简介1.1 单元测试

单元测试:是指对软件中的最小可测试单元进行检查和验证。(单一模块、一个过程、一个函数等)

1.2 单元测试范围和目标

单元测试包含计划阶段、设计阶段、实现阶段和执行阶段。起始于详细设计,主要是各模块的源代码进行测试,直到单元阶段结束后终止。此时主要是PHP单元测试。

单元测试的目标是隔离程序部件并证明这些单个部件是正确的。一个单元测试提供了代码片断需要满足的严密的书面规约。

2 安装与使用2.1 安装PHPUnit

1、在Linux中下载PHPUnit wget https://phar.phpunit.de/phpunit.phar

2、添加执行权限 chmod +x phpunit.phar

3、更改路径mv phpunit.phar /usr/local/bin/phpunit

4、查看phpunit版本phpunit --version


2.2 使用

1、如有详细设计文档,先仔细阅读详细设计文档;针对需要测试的PHP代码先进行静态走读(查看是否正规编写、查看是否有逻辑错误、查看是否有未实现的功能等。)

2、编写测试脚本(以xxx.php为例)

1)首先是调用xxx配置文件以及调用PHPunit


有些是这样的:/**************测试加载******************/constCONFIG_ENV='office';//include_once__DIR__."/../../sdk/Autoload.php";//include_once"ApiHelper.php";include('/data/wuheyou_php/trunk/sdk/Autoload.php');ImportModule('home');

2)然后测试模块加载类


3)最后编写测试用例(根据php代码,分析等,传入正确参数、错误参数、缺失参数、多余参数、路径覆盖、条件判断等)

访问私有函数publicfunctiontestuserTechDonateResource(){print("资源争夺战个人科技贡献");for($i=0;$i<=20;$i++){//资源争夺战8基础战力,9幸运倍率,10守城加成,11宽度$boss=newGangTech(144540,136);$method=newReflectionMethod('GangTech','userTechDonateResource');$method->setAccessible(true);$tech_id=9;$type=3;//资源争夺战$result=$method->invoke($boss,$tech_id,$type);var_dump($result);$this->assertArraySubset(["result"=>"true"],array("result"=>"true","code"=>0,"msg"=>"成功","data"=>array("next_score"=>60,"star"=>3)));}}

例子:1publicfunctiontestPublishGuessodds(){echo"odds为负数!\n";$guess=newGameGuess();$uid=186;$guessdesc="这是我的猜猜猜22222";//$options=array(array('option_name'=>'我是谁','odds'=>1.6),array('option_name'=>'我是谁2','odds'=>1.5));//传入多组$options[]=array('option_name'=>'是是是是是','odds'=>-1.6);//传入单组$aborttime='1449049541';$result=$guess->publishGuess($uid,$guessdesc,$options,$aborttime);//var_dump($result);$this->assertEquals('赔率设置不合法',$result->msg);}例子2:publicfunctiontestbestlist(){print("\n城市转转转押注情况列表\n");$list=newGameCitytrun();$data=array('uid'=>183,'gtypeid'=>20);$result=$list->betList($data);var_dump($result);$this->assertTrue(true);}例子3:publicfunctiontestdoSpin(){print("摇奖生成随机数,作为×××的布局\n");$DSp=newGameBetTiger();$method=newReflectionMethod('GameBetTiger','doSpin');$method->setAccessible(true);$res_num=array();$this->res_num=array("1"=>Array("11"=>4,"21"=>2,"31"=>5),"2"=>Array("12"=>5,"22"=>2,"32"=>7),"3"=>Array("13"=>4,"23"=>2,"33"=>4),"4"=>Array("14"=>2,"24"=>2,"34"=>9),"5"=>Array("15"=>2,"25"=>5,"35"=>8));$result=$method->invoke($DSp);var_dump($this->res_num);

3、执行对比返回结果 phpunitxxx.php

1) 正确数据发送请求时,查看返回数据是否正确、是否会报错、数据库中是否正常插入数据、关闭相关数据库是否能正常工作等。

2)错误数据发送请求时,查看返回数据是否有异常处理、是否有报错、数据是否有异常、等。

3)发现BUG,在提交BUG指向相关开发并督促修复bug,只至关闭BUG。