测试用例详解(3)

发表于:2014-08-01来源:uml.org.cn作者:nonultimate点击数: 标签:测试用例
{ return $a * $b; } } ? PHP代码 require_once Calculator.php; class CalcuatorTest extends PHPUnit_Framework_TestCase { public function testadd() { // 创建实例 $c = new Calculator(); $expected = 4

  {

  return $a * $b;

  }

  }

  ?>

  PHP代码

  require_once 'Calculator.php';

  class CalcuatorTest extends PHPUnit_Framework_TestCase

  {

  public function testadd()

  {

  // 创建实例

  $c = new Calculator();

  $expected = 4;

  // 做加法

  $result = $c->add(2, 2);

  $this->assertEquals($expected, $result);

  }

  }

  ?>

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

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

  PHP代码

  /**

  * File.php

  */

  /**

  * 在文件中写入数据并保存

  *

  * @param string $path

  * @param string $data

  * @return bool

  */

  function Save($path, $data)

  {

  if (is_dir($path)) {

  return FALSE;

  }

  return file_put_contents($path, $data);

  }

  ?>

  PHP代码

  /**

  * FileTest.php

  */

  require_once 'File.php';

  class FileTest extends PHPUnit_Framework_TestCase

  {

  /**

  * 测试保存文件

  */

  public function testSave()

  {

  $file = 'IamFile.txt';

  $dir = 'IamDir';

  mkdir($dir);

  // 测试返回值为真的情况

  $this->assertTrue(Save($file, 'TestTrue'));

  // 测试返回值为假的情况

  $this->assertFalse(Save($dir, 'TestFalse'));

  // 恢复现场

  if (is_file($file)) {

  unlink($file);

  }

  rmdir($dir);

  }

  }

  ?>

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

  PHP代码

  /**

  * URL生成函数

  *

  * @param string $action 方法名

  * @param string $module 模块名

  * @param string $route 路由名

  * @param array $params 参数

  */

  function url($action=ACTION_NAME,$module=MODULE_NAME,$route='',$app=APP_NAME,$params=array())

  {

  if(C('DISPATCH_ON') && C('URL_MODEL')>0) {

  switch(C('PATH_MODEL')) {

  case 1:// 普通PATHINFO模式

  $str = '/';

  foreach ($params as $var=>$val)

  $str .= $var.'/'.$val.'/';

  $str = substr($str,0,-1);

  if(!emptyempty($route)) {

  $url = str_replace(APP_NAME,$app,).'/'.C('VAR_ROUTER').'/'.$route.'/'.$str;

  }else{

  $url = str_replace(APP_NAME,$app,).'/'.C('VAR_MODULE').'/'.$module.'/'.C('VAR_ACTION').'/'.$action.$str;

  }

  break;

  case 2:// 智能PATHINFO模式

  $depr = C('PATH_DEPR');

  $str = $depr;

  foreach ($params as $var=>$val)

  $str .= $var.$depr.$val.$depr;

  $str = substr($str,0,-1);

  if(!emptyempty($route)) {

  $url = str_replace(APP_NAME,$app,).'/'.$route.$str;

  }else{

  $url = str_replace(APP_NAME,$app,).'/'.$module.$depr.$action.$str;

  }

  break;

  }

  if(C('HTML_URL_SUFFIX')) {

  $url .= C('HTML_URL_SUFFIX');

  }

  }else{

  $params = http_build_query($params);

  if(!emptyempty($route)) {

  $url = str_replace(APP_NAME,$app,).'?'.C('VAR_ROUTER').'='.$route.'&'.$params;

  }else{

  $url = str_replace(APP_NAME,$app,).'?'.C('VAR_MODULE').'='.$module.'&'.C('VAR_ACTION').'='.$action.'&'.$params;

原文转自:http://www.uml.org.cn/Test/200910169.asp