【发布时间】:2017-09-14 19:33:22
【问题描述】:
我目前正在尝试构建一个 phpunit 测试套件来测试一些按程序编写的 ajax 代码。 我无法编辑原始代码,fooBar.php,因为它可能会导致其他地方出现问题。当我尝试使用不同的参数多次运行 php 文件时会出现此问题;该代码有一个抛出重新声明异常的函数。以下是我正在处理的示例。
fooBar.php - 使用 ajax 调用命中的 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 - 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.......
问题在于,在运行第二个测试 testFooBarFailure() 时,fooBar.php 在技术上已经存在。正如你所看到的,我需要重新运行 fooBar.php 以获得新的响应。
有没有办法从 php 堆栈/内存中删除 fooBar.php 以便我可以再次运行它,就好像它从未从第一次测试中加载一样?我尝试将第二个测试函数拉入它自己的测试类,但是当我作为一个整体运行测试套件时,我得到了完全相同的错误。
【问题讨论】:
标签: php phpunit procedural