测试php函数的方法


Posted in PHP onNovember 13, 2013

今天忽然想到的,就写了一段测试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边学边教》(01.开篇――准备工作)
Dec 13 PHP
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 PHP
php页面跳转代码 输入网址跳转到你定义的页面
Mar 28 PHP
解析strtr函数的效率问题
Jun 26 PHP
PHP随机生成随机个数的字母组合示例
Jan 14 PHP
php共享内存段示例分享
Jan 20 PHP
ThinkPHP整合百度Ueditor图文教程
Oct 21 PHP
PDO预处理语句PDOStatement对象使用总结
Nov 20 PHP
PHP封装CURL扩展类实例
Jul 28 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
PHP 对象继承原理与简单用法示例
Apr 21 PHP
PHP中判断变量为空的几种方法小结
Nov 12 #PHP
php不允许用户提交空表单(php空值判断)
Nov 12 #PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
Nov 12 #PHP
session在php5.3中的变化 session_is_registered() is deprecated in
Nov 12 #PHP
PHP使用正则表达式清除超链接文本
Nov 12 #PHP
PHP统计二维数组元素个数的方法
Nov 12 #PHP
多个PHP中文字符串截取函数
Nov 12 #PHP
You might like
php 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
vue实现下拉加载其实没那么复杂
2019/08/13 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
毕业生找工作推荐信
2013/11/21 职场文书
汽车销售顾问求职自荐信
2014/01/01 职场文书
应聘面试自我评价
2014/01/24 职场文书
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
厨师长岗位职责范本
2014/08/25 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
运动会200米广播稿
2015/08/19 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电
js前端图片加载异常兜底方案
2022/06/21 Javascript