这是我的phpunit测试文件
<?php // DemoTest - test to prove the point
function __autoload($className) {
// pick file up from current directory
$f = $className.'.php';
require_once $f;
}
class DemoTest extends PHPUnit_Framework_TestCase {
// call same test twice - det different results
function test01() {
$this->controller = new demo();
ob_start();
$this->controller->handleit();
$result = ob_get_clean();
$expect = 'Actions is an array';
$this->assertEquals($expect,$result);
}
function test02() {
$this->test01();
}
}
?>
这是受测试的文件
<?php // demo.php
global $actions;
$actions=array('one','two','three');
class demo {
function handleit() {
global $actions;
if (is_null($actions)) {
print "Actions is null";
} else {
print('Actions is an array');
}
}
}
?>
结果是第二次测试失败,因为$ actions为null。
我的问题是 - 为什么我不能在两次测试中获得相同的结果?
这是phpunit中的错误还是我对php的理解?
答案 0 :(得分:3)
PHPUnit有一个名为“备份全局变量”的功能,如果打开,那么在测试开始时,全局范围内的所有变量都会被备份(快照由当前值组成),并且在每次测试完成后,值将再次恢复到原始值。您可以在此处详细了解:http://sebastian-bergmann.de/archives/797-Global-Variables-and-PHPUnit.html#content
现在让我们来看看你的测试套件。
直接修复您的问题:在DemoTest.php的开头包含demo.php,这样$ actions就会在每次测试之前和之后备份和恢复的全局范围内结束。
长期修复:尽量避免使用全局变量。它只是一个坏习惯,总有比使用“全球”的全球状态更好的解决方案。