测试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运行时强制显示出错信息的代码
Apr 20 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
Jan 23 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
Apr 03 PHP
PHP中SESSION的注销与清除
Apr 16 PHP
PHP中预定义的6种接口介绍
May 12 PHP
PHP网络操作函数汇总
May 18 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
Oct 18 PHP
深入了解PHP中的Array数组和foreach
Nov 06 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
Nov 06 PHP
Laravel实现短信注册的示例代码
May 29 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 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
PHP新手上路(四)
2006/10/09 PHP
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
php结合表单实现一些简单功能的例子
2011/06/04 PHP
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
PHP+Ajax实时自动检测是否联网的方法
2015/07/01 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
php判断目录存在的简单方法
2019/09/26 PHP
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
基于jquery的拖动布局插件
2011/11/25 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
js简单实现网页换肤功能
2017/04/07 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
javascript中关于类型判断的一些疑惑小结
2018/10/14 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
Python实现telnet服务器的方法
2015/07/10 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
自我推荐信范文
2014/05/09 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
2014高考励志标语
2014/06/05 职场文书
中学教师个人总结
2015/02/10 职场文书
消防验收申请报告
2015/05/15 职场文书