测试php函数的方法

本文提供的方法是用于测试php函数的代码,今天忽然想到的,就写了一段测试php函数的代码,代码如下:

  1. <?php
  2. /**
  3. * 参数数组$ParamList说明
  4. *
  5. * 数组的第一维索引是需要测试的函数的参数名,第二维的每个元素是该参数需要测试的可能值,元素值可以为数组。
  6. */
  7. $ParamList = array("Param1" => array(3,4,3,2,1),
  8. "Param2" => array(3,2,5),
  9. "Param3" => array(0,0.5,1,1.5));
  10. // 测试函数
  11. sysTestFunction("Test", $ParamList);
  12. // 待测试的函数
  13. function Test($Param1, $Param2, $Param3)
  14. {
  15. return $Param1 . "|" . $Param2 . "|" . $Param3;
  16. }
  17. /**
  18. * 自动测试
  19. *
  20. * @param string $FunctionName 函数名称
  21. * @param array $ParamList 参数列表
  22. * @return array
  23. */
  24. function sysTestFunction($FunctionName, $ParamList)
  25. {
  26. if(emptyempty($FunctionName))
  27. {
  28. echo "函数名不能为空";
  29. return false;
  30. }
  31. if(!is_array(current($ParamList)))
  32. {
  33. echo "参数不是2维数组";
  34. return false;
  35. }
  36. $TestParamList = sysCombineArray($ParamList);
  37. echo "开始测试函数" . $FunctionName . "<br />";
  38. foreach($TestParamList as $Key => $TestParamInfo)
  39. {
  40. echo "开始测试第" . $Key . "组参数:<br />";
  41. foreach($TestParamInfo as $ParamKey => $Param)
  42. {
  43. ${"Param" . $ParamKey} = $Param;
  44. $TempParamList[] = "$Param" . $ParamKey;
  45. if(is_array($Param))
  46. {
  47. echo "参数" . $ParamKey . ",类型为数组:";
  48. echo "<pre>";
  49. print_r($Param);
  50. }
  51. elseif(is_bool($Param))
  52. {
  53. echo "参数" . $ParamKey . ",类型为boll:";
  54. if($Param)
  55. {
  56. echo "true";
  57. }
  58. else
  59. {
  60. echo "false";
  61. }
  62. }
  63. else
  64. {
  65. echo "参数" . $ParamKey . ",类型为字符串或数字:";
  66. echo $Param;
  67. }
  68. echo "<br />";
  69. }
  70. $Params = join(", ", $TempParamList);
  71. unset($TempParamList);
  72. eval("$TestReturnResult = " . $FunctionName . "(" . $Params . ");");
  73. if(is_array($TestReturnResult))
  74. {
  75. echo "函数返回数组:<pre>";
  76. print_r($TestReturnResult);
  77. }
  78. elseif(is_bool($TestReturnResult))
  79. {
  80. if($TestReturnResult)
  81. {
  82. echo "函数返回true";
  83. }
  84. else
  85. {
  86. echo "函数返回false";
  87. }
  88. }
  89. else
  90. {
  91. echo "函数返回数字或字符串:" . $TestReturnResult;
  92. }
  93. echo "<br /><br />";
  94. }
  95. }
  96. /**
  97. * 计算组合的函数
  98. *
  99. * @param array $CombinList 待排列组合的2维数组
  100. * @return array 组合后的数组
  101. */
  102. function sysCombineArray($CombinList)
  103. {
  104. if(!is_array(current($CombinList)))
  105. {
  106. echo "参数不是2维数组";
  107. return false;
  108. }
  109. /* 计算C(a,1) * C(b, 1) * ... * C(n, 1)的值 */
  110. $CombineCount = 1;
  111. foreach($CombinList as $Key => $Value)
  112. {
  113. $CombineCount *= count($Value);
  114. }
  115. $RepeatTime = $CombineCount;
  116. foreach($CombinList as $ClassNo => $ParamList)
  117. {
  118. // $ParamList中的元素在拆分成组合后纵向出现的最大重复次数
  119. $RepeatTime = $RepeatTime / count($ParamList);
  120. $StartPosition = 1;
  121. foreach($ParamList as $Param)
  122. {
  123. $TempStartPosition = $StartPosition;
  124. $SpaceCount = $CombineCount / count($ParamList) / $RepeatTime;
  125. for($J = 1; $J <= $SpaceCount; $J ++)
  126. {
  127. for($I = 0; $I < $RepeatTime; $I ++)
  128. {
  129. $Result[$TempStartPosition + $I][$ClassNo] = $Param;
  130. } //phpfensi.com
  131. $TempStartPosition += $RepeatTime * count($ParamList);
  132. }
  133. $StartPosition += $RepeatTime;
  134. }
  135. }
  136. return $Result;
  137. }
  138. ?>