测试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 相关文章推荐
拼音码表的生成
Oct 09 PHP
PHP实现用户认证及管理完全源码
Mar 11 PHP
黑夜路人出的几道php笔试题
Aug 04 PHP
php 数学运算验证码实现代码
Oct 11 PHP
PHP操作xml代码
Jun 17 PHP
PHP的博客ping服务代码
Feb 04 PHP
PHP文章采集URL补全函数(FormatUrl)
Aug 02 PHP
php实现12306余票查询、价格查询示例
Apr 17 PHP
PHP base64编码后解码乱码的解决办法
Jun 19 PHP
php通过asort()给关联数组按照值排序的方法
Mar 18 PHP
PHP检测接口Traversable用法详解
Dec 29 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
Feb 27 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
15种PHP Encoder的比较
2007/04/17 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
JS实现的仿淘宝交易倒计时效果
2015/11/27 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
手动初始化Angular的模块与控制器
2016/12/26 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
Python实现压缩和解压缩ZIP文件的方法分析
2017/09/28 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
python匿名函数的使用方法解析
2019/10/10 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
怎样让char类型的东西转换成int类型
2013/12/09 面试题
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/01/13 面试题
为什么需要版本控制
2016/10/28 面试题
快餐店的创业计划书范文
2014/01/29 职场文书
总经理任命书
2014/03/29 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
Django中session进行权限管理的使用
2021/07/09 Python