测试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的面向对象编程
Oct 09 PHP
PHP 最大运行时间 max_execution_time修改方法
Mar 08 PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 PHP
PHP中$_SERVER的详细参数与说明介绍
Oct 26 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 PHP
php+ajax实现文章自动保存的方法
Dec 30 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
php限制文件下载速度的代码
Oct 20 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
Mar 18 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
May 09 PHP
laravel 出现command not found问题的解决方案
Oct 23 PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 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
第六节--访问属性和方法
2006/11/16 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
PHP垃圾回收机制引用计数器概念分析
2013/06/24 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
PHP解决中文乱码
2017/04/28 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
9个JavaScript评级/投票插件
2010/01/18 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
Python isinstance判断对象类型
2008/09/06 Python
Python字符串处理之count()方法的使用
2015/05/18 Python
Python如何发布程序的详细教程
2018/10/09 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
Python hashlib模块实例使用详解
2019/12/24 Python
python已协程方式处理任务实现过程
2019/12/27 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
python之生成多层json结构的实现
2020/02/27 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
Matplotlib配色之Colormap详解
2021/01/05 Python
基本款天堂:Everlane
2017/05/13 全球购物
北大自主招生自荐信
2013/10/19 职场文书
党的群众路线教育实践活动动员会主持词
2014/03/20 职场文书
中央空调节能方案
2014/06/15 职场文书
党员个人查摆剖析材料
2014/10/16 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
Vue3.0 手写放大镜效果
2021/07/25 Vue.js