首页 > 语言 > PHP > 正文

测试php函数的方法

2024-09-04 11:49:53
字体:大 中 小
来源:转载
供稿:网友

本文提供的方法是用于测试php函数的代码,今天忽然想到的,就写了一段测试php函数的代码,代码如下:

  1. <?php 
  2. /** 
  3.  * 参数数组$ParamList说明 
  4.  * 
  5.  * 数组的第一维索引是需要测试的函数的参数名,第二维的每个元素是该参数需要测试的可能值,元素值可以为数组。 
  6.  */ 
  7. $ParamList = array("Param1" => array(3,4,3,2,1), 
  8.                    "Param2" => array(3,2,5), 
  9.                    "Param3" => array(0,0.5,1,1.5)); 
  10. // 测试函数 
  11. sysTestFunction("Test", $ParamList); 
  12.  
  13. // 待测试的函数 
  14. function Test($Param1, $Param2, $Param3) 
  15. { 
  16.     return $Param1 . "|" . $Param2 . "|" . $Param3; 
  17. } 
  18.  
  19. /** 
  20.  * 自动测试 
  21.  * 
  22.  * @param  string  $FunctionName  函数名称 
  23.  * @param  array   $ParamList     参数列表 
  24.  * @return array 
  25.  */ 
  26. function sysTestFunction($FunctionName, $ParamList) 
  27. { 
  28.     if(emptyempty($FunctionName)) 
  29.     { 
  30.         echo "函数名不能为空"; 
  31.         return false; 
  32.     } 
  33.     if(!is_array(current($ParamList))) 
  34.     { 
  35.         echo "参数不是2维数组"; 
  36.         return false; 
  37.     } 
  38.     $TestParamList = sysCombineArray($ParamList); 
  39.     echo "开始测试函数" . $FunctionName . "<br />"; 
  40.     foreach($TestParamList as $Key => $TestParamInfo) 
  41.     { 
  42.         echo "开始测试第" . $Key . "组参数:<br />"; 
  43.         foreach($TestParamInfo as $ParamKey => $Param) 
  44.         { 
  45.             ${"Param" . $ParamKey} = $Param; 
  46.             $TempParamList[] = "$Param" . $ParamKey; 
  47.             if(is_array($Param)) 
  48.             { 
  49.                 echo "参数" . $ParamKey . ",类型为数组:"; 
  50.                 echo "<pre>"; 
  51.                 print_r($Param); 
  52.             } 
  53.             elseif(is_bool($Param)) 
  54.             { 
  55.                 echo "参数" . $ParamKey . ",类型为boll:"; 
  56.                 if($Param) 
  57.                 { 
  58.                     echo "true"; 
  59.                 } 
  60.                 else 
  61.                 { 
  62.                     echo "false"; 
  63.                 } 
  64.             } 
  65.             else 
  66.             { 
  67.                 echo "参数" . $ParamKey . ",类型为字符串或数字:"; 
  68.                 echo $Param; 
  69.             } 
  70.             echo "<br />"; 
  71.         } 
  72.         $Params = join(", ", $TempParamList); 
  73.         unset($TempParamList); 
  74.         eval("$TestReturnResult = " . $FunctionName . "(" . $Params . ");"); 
  75.         if(is_array($TestReturnResult)) 
  76.         { 
  77.             echo "函数返回数组:<pre>"; 
  78.             print_r($TestReturnResult); 
  79.         } 
  80.         elseif(is_bool($TestReturnResult)) 
  81.         { 
  82.             if($TestReturnResult) 
  83.             { 
  84.                 echo "函数返回true"; 
  85.             } 
  86.             else 
  87.             { 
  88.                 echo "函数返回false"; 
  89.             } 
  90.         } 
  91.         else 
  92.         { 
  93.             echo "函数返回数字或字符串:" . $TestReturnResult; 
  94.         } 
  95.         echo "<br /><br />"; 
  96.     } 
  97. } 
  98. /** 
  99.  * 计算组合的函数 
  100.  * 
  101.  * @param  array $CombinList 待排列组合的2维数组 
  102.  * @return array             组合后的数组 
  103.  */ 
  104. function sysCombineArray($CombinList) 
  105. { 
  106.     if(!is_array(current($CombinList))) 
  107.     { 
  108.         echo "参数不是2维数组"; 
  109.         return false; 
  110.     } 
  111.     /* 计算C(a,1) * C(b, 1) * ... * C(n, 1)的值 */ 
  112.     $CombineCount = 1; 
  113.     foreach($CombinList as $Key => $Value) 
  114.     { 
  115.         $CombineCount *= count($Value); 
  116.     } 
  117.     $RepeatTime = $CombineCount; 
  118.     foreach($CombinList as $ClassNo => $ParamList) 
  119.     { 
  120.         // $ParamList中的元素在拆分成组合后纵向出现的最大重复次数 
  121.         $RepeatTime = $RepeatTime / count($ParamList); 
  122.         $StartPosition = 1; 
  123.         foreach($ParamList as $Param) 
  124.         { 
  125.             $TempStartPosition = $StartPosition; 
  126.             $SpaceCount = $CombineCount / count($ParamList) / $RepeatTime; 
  127.             for($J = 1; $J <= $SpaceCount; $J ++) 
  128.             { 
  129.                 for($I = 0; $I < $RepeatTime; $I ++) 
  130.                 { 
  131.                    $Result[$TempStartPosition + $I][$ClassNo] = $Param; 
  132.                 } //Vevb.com 
  133.                 $TempStartPosition += $RepeatTime * count($ParamList); 
  134.             } 
  135.             $StartPosition += $RepeatTime; 
  136.         } 
  137.     } 
  138.     return $Result; 
  139. } 
  140. ?> 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表