測試用例詳解(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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97