测试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.NET的入门教程
Oct 09 PHP
实用函数3
Nov 08 PHP
作为PHP程序员应该了解MongoDB的五件事
Jun 03 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 PHP
PHP实现阳历到农历转换的类实例
Mar 07 PHP
PHP实现的购物车类实例
Jun 17 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
Sep 23 PHP
PHP中的密码加密的解决方案总结
Oct 26 PHP
Zend Framework动作控制器用法示例
Dec 09 PHP
php插入mysql数据返回id的方法
May 31 PHP
laravel框架邮箱认证实现方法详解
Nov 22 PHP
让whoops帮我们告别ThinkPHP6的异常页面
Mar 02 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
做个自己站内搜索引擎
2006/10/09 PHP
基于mysql的bbs设计(二)
2006/10/09 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
popdiv
2006/07/14 Javascript
Document 对象的常用方法
2009/07/31 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
详解vue中组件参数
2018/07/09 Javascript
node.js中TCP Socket多进程间的消息推送示例详解
2018/07/10 Javascript
利用Blob进行文件上传的完整步骤
2018/08/02 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
Vue左滑组件slider使用详解
2020/08/21 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
Python logging模块原理解析及应用
2020/08/13 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
2014年小学重阳节活动策划方案
2014/09/16 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS
Python机器学习之PCA降维算法详解
2021/05/19 Python
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android
Mysql中常用的join连接方式
2022/05/11 MySQL
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android