В настоящее время я пытаюсь создать набор тестов phpunit для тестирования кода ajax, который написан процедурно. Я не могу редактировать исходный код, fooBar.php, поскольку это может вызвать проблемы в другом месте. Проблема возникает, когда я пытаюсь запустить файл php несколько раз с разными параметрами; в коде есть функция, которая вызывает повторное объявление исключений. Ниже приведен пример того, с чем я имею дело.
fooBar.php — файл php попал под вызов ajax
$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 — тестовый файл 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));
}
Итак, когда я запускаю этот тест, я получаю следующую ошибку
PHP Fatal error: Cannot redeclare randomFunctionName() (previously declared in.......
Проблема возникает из-за того, что технически fooBar.php уже существует, когда выполняется второй тест, testFooBarFailure(). Однако, как видите, мне нужно перезапустить fooBar.php, чтобы получить новый ответ.
Есть ли способ удалить fooBar.php из стека/памяти php, чтобы я мог запустить его снова, как если бы он никогда не загружался из первого теста? Я попытался вытащить вторую тестовую функцию в свой собственный тестовый класс, но когда я запускаю набор тестов в целом, я получаю ту же самую ошибку.