测试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中for循环语句的几种变型
Mar 16 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
php实现点击可刷新验证码
Nov 07 PHP
yii2带搜索功能的下拉框实例详解
May 12 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
php支付宝在线支付接口开发教程
Sep 19 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
详解php curl带有csrf-token验证模拟提交方法
Apr 18 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 PHP
PHP常见字符串操作函数与用法总结
Mar 04 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
php使用Swoole实现毫秒级定时任务的方法
Sep 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
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
php实现微信支付之现金红包
2018/05/30 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
基于jQuery试卷自动排版系统
2010/07/18 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
2016/06/05 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
在Django的模板中使用认证数据的方法
2015/07/23 Python
python中logging库的使用总结
2017/10/18 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
NumPy 数组使用大全
2019/04/25 Python
Python读写Excel表格的方法
2021/03/02 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
写给女生的道歉信
2014/01/14 职场文书
大学同学聚会邀请函
2014/01/19 职场文书
电子信息工程专业推荐信
2014/02/14 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
红领巾广播站广播稿
2014/10/19 职场文书
市直属机关2016年主题党日活动总结
2016/04/05 职场文书
Go语言特点及基本数据类型使用详解
2022/03/21 Golang