문제

테스트하는 가장 좋은 방법은 무엇입니까? $_GET 그리고 $_POST 입력 PHPUnit?

입력을 소독하는 클래스가 있으며 가짜 데이터를 처리 할 때 올바르게 작동하는지 확인하고 싶습니다. 양식 변수를 설정하는 쉬운 방법이 있습니까? PHPUnit 아니면 유효성 검사를 양식 변수에 공급되는 2 차 클래스/함수로 전달해야하므로 간접적으로 테스트해야합니까?

도움이 되었습니까?

해결책

아이디어를 살펴보십시오 의존성 주입. 간단히 말해서 당신은 필요한 데이터를 얻는 것과는 달리 필요한 것을 코드에 공급해야합니다 ... 예는 다음과 같습니다.

의존성 주입이없는 예

function sanitize1() {
  foreach($_POST as $k => $v) {
    // code to sanitize $v
  }
}

sanitize1();

의존성 주입의 예

function sanitize2(array &$formData) {
  foreach($formData as $k => $v) {
    // code to sanitize $v
  }
}

sanitize2($_POST);

차이를 보시겠습니까? PHPUNIT 테스트에서 통과 할 수 있습니다 sanitize2() 당신이 선택한 연관 배열; 의존성을 주입했습니다. 반면 sanitize1() 결합됩니다 $_POST. $_POST 그리고 $_GET 어쨌든 Assoc 배열이므로 생산 코드에서 통과 할 수 있습니다. $_GET 또는 $_POST 당신의 기능이지만 단위 테스트에서는 예상되는 데이터를 하드 코딩합니다.

단위 테스트 예 :

function testSanitize() {
  $fakeFormData = array ('bio' => 'hi i\'m arin', 'location' => 'San Francisco');
  sanitize($fakeFormData);
  // assert something
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top