华域联盟

标题: 用于测试php函数的代码 [打印本页]

作者: sterben    时间: 2016-10-13 20:43
标题: 用于测试php函数的代码
今天忽然想到的,就写了一段测试php函数的代码。
; t1 Z' K; r* w& \# k
* x' q; c# Z% T/ F: i

<?php

/**4 `1 _8 e/ l; b8 J/ F' f6 P# i
* 参数数组$ParamList阐明
; g! m/ R! w; O *
5 Y$ l& g& Z0 U2 G' C. Y8 i; X+ f * 数组的第一维索引是需求测试的函数的参数名,第二维的每个元素是该参数需求测试的可能值,元素值能够为数组。' o8 d/ L+ M2 U9 l+ k
*/

$ParamList = array("Param1" => array(3,4,3,2,1),
% F5 d7 @8 F8 @) Z  ]7 M% O" h( u6 N                   "Param2" => array(3,2,5),! j( F8 Z7 b9 m0 ]8 i
                   "Param3" => array(0,0.5,1,1.5));

// 测试函数  N5 C  V7 s' U  H8 M) S
sysTestFunction("Test", $ParamList);

: N( N* W0 V) E: T; U1 g6 w0 [! z
// 待测试的函数
8 H$ R2 i1 q& Q5 k, N3 F% yfunction Test($Param1, $Param2, $Param3)2 o+ w" X1 t$ q' s
{
+ ^9 P, Q# q) T$ _* e! y" E" \    return $Param1 . "|" . $Param2 . "|" . $Param3;+ e9 Z( \; O( L
}

! V. q( G* Y" o7 B
/**9 G, n4 g8 ]  K) R, o; ^& {
* 自动测试
/ f; S3 c+ Q) p# t- h, r. z( z- B *
/ o+ ~$ Q) b/ D  l5 q+ L * @author         李玉鹏<leeyupeng@163.com>$ T  x4 [: B( c
* @param  string  $FunctionName  函数称号  U3 A2 C7 l; ~4 x& A
* @param  array   $ParamList     参数列表
, y* o7 G, K- _5 | * @return array
5 X) P, \, W- m: q1 ?' @ */
' a7 h( v9 ?% c  O9 A8 F4 _! o$ Sfunction sysTestFunction($FunctionName, $ParamList)
" g5 i& F$ R7 [{# [8 v7 y9 b+ ~/ r; F
    if(empty($FunctionName))
) t! _) D3 {# t    {
2 L8 ?8 v7 \$ D9 C        echo "函数名不能为空";
$ P) s6 c; T% W        return false;
$ i$ o0 G  {) T2 a4 g5 _* {: ~    }

    if(!is_array(current($ParamList)))
( X  ]  I% h& v7 p! H    {0 O, G3 }( @( O4 K, A- @2 U8 d% i
        echo "参数不是2维数组";
# a. w  c6 f$ S2 o  K        return false;
  S. y# V6 f5 ^4 r! @    }

    $TestParamList = sysCombineArray($ParamList);

    echo "开端测试函数" . $FunctionName . "<br />";
6 D' A# P9 R7 `, U  A    foreach($TestParamList as $Key => $TestParamInfo)
) e: `1 F- }6 w    {
* N2 s/ C- N* \) C  j* o        echo "开端测试第" . $Key . "组参数:<br />";

        foreach($TestParamInfo as $ParamKey => $Param); D1 X5 ~. e+ F5 S- ]0 i
        {
! U0 S0 i6 u, L0 m. T( p            ${"Param" . $ParamKey} = $Param;! J4 Z: C7 X1 @* P" i2 ~
            $TempParamList[] = "$Param" . $ParamKey;
. Y0 x$ K5 L  I) X9 u$ s            if(is_array($Param))
2 u& u' {' [* T0 X! j2 L            {+ R3 c- l( [$ {% o4 z
                echo "参数" . $ParamKey . ",类型为数组:";* t$ Y- l7 c2 A) Z9 e; f, K
                echo "<pre>";( A3 v9 z( r, C/ Q
                print_r($Param);
; i, j: ~0 L4 |3 o$ v            }
0 y' `$ F# P4 k) C$ b3 w2 C            elseif(is_bool($Param))
3 j' X7 w" @! W. J; k1 _" B  O/ q            {
% x& v. }6 q4 w7 M% h; g* n" H  G                echo "参数" . $ParamKey . ",类型为boll:";% f% h8 R! E. A0 V. u& J; F
                if($Param)
) i, Z9 B7 f9 ~  g7 L4 k                {
1 Z1 L) H3 J1 d9 x7 l                    echo "true";
( F2 r/ D# J& }* ~/ @' P                }
6 ]7 B( [5 V, F- c+ @                else# G: g( G" A/ B# J$ ~0 U
                {
7 B$ A. D* K+ @1 h                    echo "false";1 v7 B0 v# t4 D8 B
                }
" v; }6 ?. L: B. x6 S            }
% H  h' |0 `; ^0 V# d$ F8 R* Y            else
1 v% V$ f- c! X5 e- l# I1 N( @) [1 O            {
) j% u3 x& }, k7 N; |0 d9 z                echo "参数" . $ParamKey . ",类型为字符串或数字:";
  j# E9 h+ A" e. \+ d! S# W, Q  Y                echo $Param;; p! }2 [9 [$ z2 {1 F, g$ L7 b
            }" Y/ h+ i' Q7 d" g7 Z
            echo "<br />";
6 J; r$ n7 L/ r- s        }

        $Params = join(", ", $TempParamList);
- i$ `- w  N( N: Y) r! w        unset($TempParamList);

        eval("$TestReturnResult = " . $FunctionName . "(" . $Params . ");");+ u5 f! j0 Z5 Q/ G8 P* Y1 e
        if(is_array($TestReturnResult))
6 t" U" i) m7 w0 ^        {
+ r4 ^; F# E! k3 @            echo "函数返回数组:<pre>";
1 X/ F3 @4 h/ {& k            print_r($TestReturnResult);
) o: b; r# U+ r, Z8 u  n! Y" q        }
; X0 u: T6 x8 X2 M  i6 m, C        elseif(is_bool($TestReturnResult))
0 h1 ^  I/ e. l1 S' Y        {
: t. m/ N! p" K: H3 [            if($TestReturnResult)
3 B4 ^, w2 h* ]+ l" ~$ W! ]            {
3 ~9 O3 W' c! J* H, I                echo "函数返回true";
+ i% y; u& g, ?            }
" ~7 p! g6 M; ?) U4 b            else
% R' C. S  g& F9 \' E5 ~            {! [3 P4 Y6 h* N) N! T3 z+ @
                echo "函数返回false";
) |6 q& e, l- q, d% `            }
8 J% U, i( b. @" w3 H7 y& @        }+ S8 t+ E# u9 n  Q  J
        else
7 w+ w3 p  W3 T& O. r        {
9 A: L' {3 f3 H& I            echo "函数返回数字或字符串:" . $TestReturnResult;7 C. I4 V9 g7 W+ V
        }
" @& R9 V& Y: g+ Y9 l+ \        echo "<br /><br />";; e( e- d! f# ?2 ~2 k* U
    }' N3 q* u* h% J! \
}

/**0 ]9 U& w/ V# }/ w/ J
* 计算组合的函数* e( u: T( m4 w
*
  A- H% i8 J  _ * @author                   李玉鹏<leeyupeng@163.com>
; U8 i5 R" C5 d7 p" Y7 H/ N * @param  array $CombinList 待排列组合的2维数组3 `8 ?5 T* t* X4 O" k+ n
* @return array             组合后的数组( N0 K# A5 @" `. A$ ]: X. K
*/
/ O5 Z! i. A0 L- V% C+ r' d- rfunction sysCombineArray($CombinList)7 x, Q; x' a# }# l2 n, S- f7 n
{
( `- \( Z) c* h1 \4 ]  v3 b; b    if(!is_array(current($CombinList)))* }- i0 Q4 Q/ {. I
    {
: W4 E" @: K3 C        echo "参数不是2维数组";
8 P8 j0 j, ?! p7 E5 o' T- W        return false;/ f) a5 o: z) G
    }

    /* 计算C(a,1) * C(b, 1) * ... * C(n, 1)的值 */
1 t' ~% \5 q1 T/ Q, n    $CombineCount = 1;* s2 C$ j# X( X# M- ]3 p4 \
    foreach($CombinList as $Key => $Value)8 Z- Y+ f( k6 u4 @: j8 G$ E
    {2 z" `5 k$ k- L
        $CombineCount *= count($Value);! K! z( g3 @, |4 z
    }

    $RepeatTime = $CombineCount;
7 y( [3 p: C' l; S0 f    foreach($CombinList as $ClassNo => $ParamList)! R3 j- B% |6 y, O$ F: `% b
    {' w3 j/ V; V- X* |. e5 |
        // $ParamList中的元素在拆分红组合后纵向呈现的最大重复次数
/ o" p1 c. T' u- y        $RepeatTime = $RepeatTime / count($ParamList);

        $StartPosition = 1;

        foreach($ParamList as $Param)' h0 e: Q9 M: A( m  ]) V. \+ g8 S1 T
        {
0 D8 S) U8 `4 m: H; w- Q5 n            $TempStartPosition = $StartPosition;

            $SpaceCount = $CombineCount / count($ParamList) / $RepeatTime;

            for($J = 1; $J <= $SpaceCount; $J ++)$ n; R+ X5 j4 l* [5 ^  `
            {
/ e. x# w. n  O9 V5 \$ Q" P4 B                for($I = 0; $I < $RepeatTime; $I ++)
+ z4 ^" ^2 C6 j8 i- Q  K/ [  E                {
3 _9 j& h  h. H+ A( }" O% v                   $Result[$TempStartPosition + $I][$ClassNo] = $Param;
% ~' i6 c5 W4 \  S: m: d                }
5 ^3 J0 _( r' [4 ?: x" g                $TempStartPosition += $RepeatTime * count($ParamList);/ |, q4 I  _/ C  \0 V
            }
- E- s' r/ _0 f0 I6 N3 N5 V6 b            $StartPosition += $RepeatTime;* R3 O4 T$ S! S8 h' ?
        }, C2 a6 u& ^+ p/ n  K
    }

    return $Result;
% j- N  X1 l5 {: {: i% e/ `}, O1 Y2 E6 F6 J) Y) Q
?>

: n$ b# J/ @' p4 L7 L7 B

作者: arskg    时间: 2016-11-20 02:20
回帖是必需的,这个能够有!
; l! G3 R! p* g  i; x" M, K
" I  Y7 D% I$ u1 B4 j% g7 J/ ?; {& v: P6 r

; {" ^) Z' E; V6 H5 {# b
: |, `3 I) _! S8 C/ P- B, x! r, h6 D% v/ O

8 b2 p6 B; {- J3 M0 }8 K8 b* `9 Z1 m
0 _- H9 H8 V7 c( T: c1 Q" e0 b% j* d! K" H) i" Z! a" x
* K& ?" T' ?. X
# u9 B2 ]; G" v- V* L0 ~1 q

) r% ^1 D! Q* S% p

4 p" ^6 o/ U! }8 T- s                               
登录/注册后可看大图

: p9 C. t7 p( e/ m3 K' P美规12V9A开关电源适配器




欢迎光临 华域联盟 (https://www.cnhackhy.com/) Powered by Discuz! X3.3