测试php函数的方法
今天忽然想到的,就写了一段测试php函数的代码。
<?php
/**
* 参数数组$paramlist说明
*
* 数组的第一维索引是需要测试的函数的参数名,第二维的每个元素是该参数需要测试的可能值,元素值可以为数组。
*/
$paramlist = array("param1" => array(3,4,3,2,1),
"param2" => array(3,2,5),
"param3" => array(0,0.5,1,1.5));
// 测试函数
systestfunction("test", $paramlist);
// 待测试的函数
function test($param1, $param2, $param3)
{
return $param1 . "|" . $param2 . "|" . $param3;
}
/**
* 自动测试
*
* @param string $functionname 函数名称
* @param array $paramlist 参数列表
* @return array
*/
function systestfunction($functionname, $paramlist)
{
if(empty($functionname))
{
echo "函数名不能为空";
return false;
}
if(!is_array(current($paramlist)))
{
echo "参数不是2维数组";
return false;
}
$testparamlist = syscombinearray($paramlist);
echo "开始测试函数" . $functionname . "<br />";
foreach($testparamlist as $key => $testparaminfo)
{
echo "开始测试第" . $key . "组参数:<br />";
foreach($testparaminfo as $paramkey => $param)
{
${"param" . $paramkey} = $param;
$tempparamlist[] = "$param" . $paramkey;
if(is_array($param))
{
echo "参数" . $paramkey . ",类型为数组:";
echo "<pre>";
print_r($param);
}
elseif(is_bool($param))
{
echo "参数" . $paramkey . ",类型为boll:";
if($param)
{
echo "true";
}
else
{
echo "false";
}
}
else
{
echo "参数" . $paramkey . ",类型为字符串或数字:";
echo $param;
}
echo "<br />";
}
$params = join(", ", $tempparamlist);
unset($tempparamlist);
eval("$testreturnresult = " . $functionname . "(" . $params . ");");
if(is_array($testreturnresult))
{
echo "函数返回数组:<pre>";
print_r($testreturnresult);
}
elseif(is_bool($testreturnresult))
{
if($testreturnresult)
{
echo "函数返回true";
}
else
{
echo "函数返回false";
}
}
else
{
echo "函数返回数字或字符串:" . $testreturnresult;
}
echo "<br /><br />";
}
}
/**
* 计算组合的函数
*
* @param array $combinlist 待排列组合的2维数组
* @return array 组合后的数组
*/
function syscombinearray($combinlist)
{
if(!is_array(current($combinlist)))
{
echo "参数不是2维数组";
return false;
}
/* 计算c(a,1) * c(b, 1) * ... * c(n, 1)的值 */
$combinecount = 1;
foreach($combinlist as $key => $value)
{
$combinecount *= count($value);
}
$repeattime = $combinecount;
foreach($combinlist as $classno => $paramlist)
{
// $paramlist中的元素在拆分成组合后纵向出现的最大重复次数
$repeattime = $repeattime / count($paramlist);
$startposition = 1;
foreach($paramlist as $param)
{
$tempstartposition = $startposition;
$spacecount = $combinecount / count($paramlist) / $repeattime;
for($j = 1; $j <= $spacecount; $j ++)
{
for($i = 0; $i < $repeattime; $i ++)
{
$result[$tempstartposition + $i][$classno] = $param;
}
$tempstartposition += $repeattime * count($paramlist);
}
$startposition += $repeattime;
}
}
return $result;
}
?>
上一篇: php实现文件下载(支持中文文名)
下一篇: 多个PHP中文字符串截取函数