测试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 相关文章推荐
用IE远程创建Mysql数据库的简易程序
Oct 09 PHP
PHP strtotime函数详解
Dec 18 PHP
PHP中PDO的事务处理分析
Apr 07 PHP
PHP性能优化大全(php.ini)
May 20 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
Aug 19 PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 PHP
PHP学习笔记之session
May 06 PHP
PHP 爬取网页的主要方法
Jul 13 PHP
PHP array_reduce()函数的应用解析
Oct 28 PHP
Laravel推荐使用的十个辅助函数
May 10 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
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
一个更简单的无限级分类菜单代码
2007/01/16 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
2014/04/28 PHP
跟我学Laravel之视图 &amp; Response
2014/10/15 PHP
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
JavaScript更改class和id的方法
2008/10/10 Javascript
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
2013/05/05 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
js实现上传按钮并显示缩略图小轮子
2020/05/04 Javascript
js实现3D旋转相册
2020/08/02 Javascript
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
python代码过长的换行方法
2018/07/19 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
Python多线程获取返回值代码实例
2020/02/17 Python
彻底搞懂 python 中文乱码问题(深入分析)
2020/02/28 Python
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
什么是Rollback Segment
2013/04/22 面试题
《纸船和风筝》教学反思
2014/02/15 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
信访维稳承诺书
2015/05/04 职场文书
提档介绍信范文
2015/10/22 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android