测试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 相关文章推荐
模板引擎Smarty深入浅出介绍
Dec 06 PHP
探讨Hessian在PHP中的使用分析
Jun 13 PHP
php实现查询百度google收录情况(示例代码)
Aug 02 PHP
PHP开发微信支付的代码分享
May 25 PHP
CentOS6.5 编译安装lnmp环境
Dec 21 PHP
php仿微信红包分配算法的实现方法
May 13 PHP
php分页原理 分页代码 分页类制作教程
Sep 23 PHP
php注册审核重点解析(数据访问)
May 23 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
Jul 07 PHP
PHP的PDO预处理语句与存储过程
Jan 27 PHP
PHP echo()函数讲解
Feb 15 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 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/06 新手入门
提升PHP执行速度全攻略(下)
2006/10/09 PHP
同时提取多条新闻中的文本一例
2006/10/09 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
vue中的watch监听数据变化及watch中各属性的详解
2018/09/11 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
基于javascript实现贪吃蛇经典小游戏
2020/04/10 Javascript
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
Python 除法小技巧
2008/09/06 Python
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
Python IDLE入门简介
2017/12/08 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
Python创建自己的加密货币的示例
2021/03/01 Python
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
Java里面有没有全局变量?为什么?
2015/02/06 面试题
规范化管理年活动总结
2014/08/29 职场文书
工作经历证明书范文
2014/11/02 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android