2011-09-20 5 views
0

가능한 중복은 :
PHP 2D Array output all combinationsPHP - 재귀 문제

나는 가능한 입력 상당한 수의 특정 기능의 동작을 테스트해야합니다. 다음과 같은 값을 가질 수 1, 2

$b :

foo ($a) 
foo ($a, $b, $c) 

$a는 다음과 같은 값을 가질 수 있습니다 'hello', 'world' 다음과 같이 함수 서명이 말.

$c 다음과 같은 값을 가질 수 있습니다 : 함수의 매개 변수의 수를 알 수 그래서 자신을 것을

1 
2 
1,hello,TRUE 
1,hello,FALSE 
2,hello,TRUE 
2,hello,FALSE 
1,world,TRUE 
1,world,FALSE 
... 

참고 : TRUE를, 다음과 같은 조합을 반환하는 함수를 작성하는 방법

FALSE 가능한 값.

+0

무엇이 당신의 질문입니까? – hakre

+2

이것은 재귀와 아무 관련이 없습니다. 원하는 모든 것이 가능한 인수 목록의 조합 인 경우 "순열"을 검색하십시오. – mario

+2

* "함수의 매개 변수의 수는 알 수 없으므로 가능한 값입니다."* - 아니요, 가능한 세 개의 매개 변수를 명시 적으로 나열한 것입니다. 두 개는 선택적이며 둘 모두 가능한 두 개의 값이 있습니다. 나에게 아주 알려지지 않은 것 같지 않습니다. – animuson

답변

0

이 질문은 재귀와 관련이없는 것 같습니다.

당신이 작성한 것부터, 각각의 가능한 순열에서 생성 된 인수 목록으로 foo() 함수를 테스트하려는 것 같습니다. 다음 코드는 해당 목록을 생성합니다.

//Generate the list 
$arg_list = array(); 
foreach(array(1,2) as $a) //Build the foo($a) cases 
    $arg_list[] = array($a); 
foreach(array(1,2) as $a) //Build the foo($a, $b, $c) cases 
    foreach(array('hello','world') as $b) 
     foreach(array(true,false) as $c) 
      $arg_list[] = array($a,$b,$c); 

//Test each possible case 
foreach($arg_list as $args) { 
    ... 
    $result = call_user_func_array('foo', $args); 
    ... 
    //Is result what was expected? Check and aggregate 
} 

이것은 당신이 한 일종의 것입니까?

+0

많은 기능을 수행하려면이 작업을 수행해야합니다. 매개 변수의 수와 유효한 값은 모두 다릅니다. 매개 변수와 그 값을 지정할 수는 있지만 각 함수를 처리하기 위해 중첩 된 루프를 원하지는 않습니다. 대신, 가능한 모든 수의 매개 변수와 가능한 값을 처리하는 함수를 원합니다. – StackOverflowNewbie

+0

테스트중인 각 함수 호출에 대해 예상되는 출력 또는 부작용은 어떻게됩니까? 단위 테스트 코드 (이럴 것 같습니다)의 경우 상당히 장황하다는 것을 받아 들여야 할 수도 있습니다. – MrTrick

+0

테스트를 실행하기위한 스키마를 디자인하고 해당 스키마에 따라 입력 및 결과 행렬을 정의하고 해당 스키마를 실행하기위한 코드를 구현할 수 있습니다. 그러나 테스트 하네스에 추가하는 모든 추상화 계층에서 버그가 발생할 위험이 있습니다 ... 테스트 하네스가 손상되면 어떻게 알 수 있습니까? – MrTrick