测试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 相关文章推荐
PHPLog php 程序调试追踪工具
Sep 09 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
本地计算机无法启动Apache故障处理
Aug 08 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
php中stdClass的用法分析
Feb 27 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
Mar 17 PHP
php 使用curl模拟ip和来源进行访问的实现方法
May 02 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
May 27 PHP
PHP defined()函数的使用图文详解
Jul 20 PHP
PHP后门隐藏的一些技巧总结
Nov 04 PHP
PHP命令行与定时任务
Apr 01 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操作数组相关函数
2011/02/03 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
js验证表单第二部分
2006/11/25 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
老生常谈Python进阶之装饰器
2017/05/11 Python
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
浅谈Django的缓存机制
2018/08/23 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
解决python 找不到module的问题
2020/02/12 Python
Python内置函数locals和globals对比
2020/04/28 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
python中pivot()函数基础知识点
2021/01/03 Python
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
英语课外活动总结
2014/08/27 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
优秀党员事迹材料
2014/12/18 职场文书
怎样写离婚协议书
2015/01/26 职场文书
青岛导游词
2015/02/12 职场文书
公司员工宿舍管理制度
2015/08/07 职场文书
初中团支书竞选稿
2015/11/21 职场文书
Python Pandas知识点之缺失值处理详解
2021/05/11 Python