测试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 相关文章推荐
编写漂亮的代码 - 将后台程序与前端程序分开
Apr 23 PHP
php循环输出数据库内容的代码
May 24 PHP
Php Ctemplate引擎开发相关内容
Mar 03 PHP
深入解析Session是否必须依赖Cookie
Aug 02 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
Oct 25 PHP
PIGCMS 如何关闭聊天机器人
Feb 12 PHP
PHP网络操作函数汇总
May 18 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
php实现水印文字和缩略图的方法示例
Dec 29 PHP
PHP 类与构造函数解析
Feb 06 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&amp;mysql(三)
2006/10/09 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
2013/11/18 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
jQuery插件ajaxfileupload.js实现上传文件
2020/10/23 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
js实现canvas图片与img图片的相互转换的示例
2017/08/31 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
简单实现python爬虫功能
2015/12/31 Python
Python while 循环使用的简单实例
2016/06/08 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
python ipset管理 增删白名单的方法
2019/01/14 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
农业资源与环境专业自荐信范文
2013/12/30 职场文书
车间统计员岗位职责
2014/01/05 职场文书
二年级小学生评语
2014/04/21 职场文书
《美丽的丹顶鹤》教学反思
2014/04/22 职场文书
我爱我的祖国演讲稿
2014/05/04 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
委托证明范本
2014/11/25 职场文书
运动员入场词
2015/07/18 职场文书
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android