現在、手続き的に書かれたいくつかのajaxコードをテストするためにphpunit testsuiteを構築しようとしています。 元のコード、fooBar.phpを編集できません。別の場所で問題が発生する可能性があるためです。この問題は、異なるパラメータでPHPファイルを複数回実行しようとしているときに発生します。コードには再宣言例外をスローする関数があります。以下は私が扱っているものの例です。PHPUnit - 複数回組み込む必要がある手続き型コード
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));
}
私はこのテストを実行するときに、私を得ます次のエラー
問題は、2番目のテストtestFooBarFailure()が実行されたときに、fooBar.phpが既に存在しているという事実から来ています。あなたが見ることができるように、新しい応答を得るためにfooBar.phpを再実行する必要があります。
fooBar.php fooBar.phpをPHPスタック/メモリから削除する方法はありますか?最初のテストではロードされなかったかのように再実行できますか? 2番目のテスト関数を独自のテストクラスに引き出そうとしましたが、テストスイート全体を実行すると、同じ正確なエラーが発生します。
いずれの提案もうまくいきません。関数が存在するかどうかをチェックすることは、元のfooBar.phpを変更することです。私が述べたように、私は元のコードを変更することができません。 PHPUnitテストファイルでは、新しい情報を送信するためにファイルをリロードする必要があります。一度それを要求する、またはそれを含むことは私にそれを許さない。 –