欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

测试php函数的方法

程序员文章站 2022-03-12 18:48:16
今天忽然想到的,就写了一段测试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;
}
?>