测试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 相关文章推荐
Get或Post提交值的非法数据处理
Oct 09 PHP
使用php+xslt在windows平台上
Oct 09 PHP
ajax完美实现两个网页 分页功能的实例代码
Apr 16 PHP
PHPMailer邮件发送的实现代码
May 04 PHP
php结合ACCESS的跨库查询功能
Jun 12 PHP
php遍历树的常用方法汇总
Jun 18 PHP
Symfony2实现在doctrine中内置数据的方法
Feb 05 PHP
php mysql获取表字段名称和字段信息的三种方法
Nov 13 PHP
thinkPHP实现的联动菜单功能详解
May 05 PHP
详解PHP处理字符串类似indexof的方法函数
Jun 11 PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 PHP
PHP基于swoole多进程操作示例
Aug 12 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
终于听上了直流胆调频
2021/03/02 无线电
PHP的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
javascript各种复制代码收集
2008/09/20 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
举例讲解jQuery中可见性过滤选择器的使用
2016/04/18 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
ES6新特性之函数的扩展实例详解
2017/04/01 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
基于node+vue实现简单的WebSocket聊天功能
2020/02/01 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
python实现H2O中的随机森林算法介绍及其项目实战
2019/08/29 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
2014学雷锋活动总结
2014/03/09 职场文书
转让协议书范本
2014/04/15 职场文书
2014年服务行业工作总结
2014/11/18 职场文书
党员评议自我评价
2015/03/03 职场文书
在校生证明
2015/06/17 职场文书
六一儿童节致辞
2015/07/31 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
自荐信大全
2019/03/21 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
python实现简单石头剪刀布游戏
2021/10/24 Python
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
PHP正则表达式之RCEService回溯
2022/04/11 PHP