测试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 相关文章推荐
同时提取多条新闻中的文本一例
Oct 09 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
解析获取优酷视频真实下载地址的PHP源代码
Jun 26 PHP
php模板原理讲解
Nov 13 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
PHP简单实现DES加密解密的方法
Jul 12 PHP
PHP自定义函数获取URL中一级域名的方法
Aug 23 PHP
php中实现进程锁与多进程的方法
Sep 18 PHP
mysql alter table命令修改表结构实例详解
Sep 24 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
php实现的PDO异常处理操作分析
Dec 27 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面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
PHP四大安全策略
2014/03/12 PHP
Javascript面向对象之四 继承
2011/02/08 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
javascript的console.log()用法小结
2012/05/31 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
python列表使用实现名字管理系统
2019/01/30 Python
python内存动态分配过程详解
2019/07/15 Python
浅谈Python中(&amp;,|)和(and,or)之间的区别
2019/08/07 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
2020/03/16 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
image-set实现Retina屏幕下图片显示详细介绍
2012/12/24 HTML / CSS
美国按摩椅批发网站:Titan Chair
2018/12/27 全球购物
你们项目是如何进行变更控制的
2015/08/26 面试题
个人找工作自荐信格式
2013/09/21 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
法律顾问服务方案
2014/05/15 职场文书
2014入党积极分子批评与自我批评思想汇报
2014/09/20 职场文书
教师个人自我剖析材料
2014/09/29 职场文书
长城的导游词
2015/01/30 职场文书
文明旅游倡议书
2015/04/28 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
爱护环境建议书
2015/09/14 职场文书
redis 解决库存并发问题实现数量控制
2022/04/08 Redis