测试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实现MySQL更新记录的代码
Jun 07 PHP
php array_slice函数的使用以及参数详解
Aug 30 PHP
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 PHP
PHP 存储文本换行实现方法
Jan 05 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
Aug 01 PHP
php学习笔记之 函数声明
Jun 09 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
Jun 25 PHP
PHP json_encode中文乱码问题的解决办法
Sep 09 PHP
php有道翻译api调用方法实例
Dec 22 PHP
怎样搭建PHP开发环境
Jul 28 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 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
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
js Html结构转字符串形式显示代码
2011/11/15 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
详解Bootstrap glyphicons字体图标
2016/01/04 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
2017/02/18 Javascript
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
React中的render何时执行过程
2018/04/13 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
[44:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第二局
2016/03/03 DOTA
gearman的安装启动及python API使用实例
2014/07/08 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
python实现对任意大小图片均匀切割的示例
2018/12/05 Python
python opencv读mp4视频的实例
2018/12/07 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
地理科学专业毕业生求职信
2013/10/15 职场文书
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
上课迟到检讨书
2014/02/19 职场文书
纪检监察建议书
2014/05/19 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
2015年党员承诺书
2015/01/21 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android