현재 절차 적으로 작성된 일부 아약스 코드를 테스트하기 위해 phpunit testsuite를 구축하려고합니다. 원래 코드, fooBar.php을 편집 할 수 없습니다. 다른 곳에서 문제가 발생할 수 있기 때문입니다. 이 문제는 여러 매개 변수로 PHP 파일을 여러 번 실행하려고 할 때 발생합니다. 코드에는 재 선언 예외를 throw하는 함수가 있습니다. 아래는 제가 다루고있는 예입니다.PHPUnit - 여러 번 포함해야하는 절차 코드
fooBar.php - 아약스 호출
$foo = $_POST['bar']; function randomFunctionName(){ echo "randomFunctionName"; } if($foo == "fooBar"){ $jsonResponse = array('success'=>true); }else{ $jsonResponse = array('success'=>false); } echo json_encode($jsonResponse);
fooBarTest.php 명중 PHP 파일 -이 테스트를 실행할 때 phpunit을 테스트 파일
class fooBarTest extends \PHPUnit\Framework\TestCase
{
private function _execute() {
ob_start();
require 'fooBar.php';
return ob_get_clean();
}
public function testFooBarSuccess(){
$_POST['bar'] = "fooBar";
$response = $this->_execute();
$this->assertTrue((strpos($response, 'success') !== false) && (strpos($response, 'true') !== false));
}
public function testFooBarFailure(){
$_POST['bar'] = "notFooBar";
$response = $this->_execute();
$this->assertTrue((strpos($response, 'success') !== false) && (strpos($response, 'false') !== false));
}
그래서, 내가 얻을 다음 오류가 발생했습니다
문제는 두 번째 테스트 인 testFooBarFailure()가 실행될 때 fooBar.php이 기술적으로 이미 존재한다는 사실에서 비롯된 것입니다. 그래도 알 수 있듯이 새로운 응답을 받으려면 fooBar.php을 다시 실행해야합니다.
fooBar.php을 PHP 스택/메모리에서 제거 할 수 있습니까? 그렇듯이 첫 번째 테스트에서로드 된 적이없는 것처럼 다시 실행할 수 있습니까? 두 번째 테스트 함수를 자체 테스트 클래스로 가져 오려고했지만 테스트 스위트를 전체적으로 실행하면 똑같은 오류가 발생합니다.
제안 사항 중 어느 것도 작동하지 않습니다. 함수가 존재하는지 확인하는 것은 원래 fooBar.php를 변경하는 것입니다. 앞에서 언급했듯이 원래 코드를 변경할 수는 없습니다. PHPUnit 테스트 파일에서 파일을 새로 고침하여 새로운 정보를 보내야합니다. 한 번 요구하거나 포함 시키면 그렇게 할 수 없습니다. –