测试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速度全攻略
Oct 09 PHP
队列在编程中的实际应用(php)
Sep 04 PHP
php中对2个数组相加的函数
Jun 24 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
Apr 09 PHP
深入php self与$this的详解
Jun 08 PHP
PHP文件读取功能的应用实例
May 08 PHP
详解PHP的Yii框架中日志的相关配置及使用
Dec 08 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
Mar 21 PHP
php短信接口代码
May 13 PHP
php禁用函数设置及查看方法详解
Jul 25 PHP
php利用header函数下载各种文件
Aug 24 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
Nov 08 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合并js请求的例子
2013/11/01 PHP
PHP正则验证Email的方法
2015/06/15 PHP
Javascript中的常见排序算法
2007/03/27 Javascript
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
vue的一个分页组件的示例代码
2017/12/25 Javascript
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
使用微信小程序开发弹出框应用实例详解
2018/10/18 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
python清理子进程机制剖析
2017/11/23 Python
numpy.random模块用法总结
2019/05/27 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
django 控制页面跳转的例子
2019/08/06 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
python装饰器原理与用法深入详解
2019/12/19 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
使用TensorBoard进行超参数优化的实现
2020/07/06 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
怎样创建、运行java程序
2014/08/01 面试题
高校辅导员推荐信范文
2013/12/25 职场文书
个人优缺点自我评价
2014/01/27 职场文书
给领导的检讨书
2014/02/16 职场文书
岗位职责说明书
2014/05/07 职场文书
团结演讲稿范文
2014/05/23 职场文书
医院搬迁方案
2014/06/14 职场文书
另类冲刺标语
2014/06/24 职场文书
先进党支部申报材料
2014/12/24 职场文书
SQL写法--行行比较
2021/08/23 SQL Server