【发布时间】:2012-02-22 19:04:02
【问题描述】:
我正在将 PHPUnit 测试放入现有项目中。全局常量变量被广泛使用。在我的单元测试中,函数失败了,因为全局变量为空。这是一个失败的测试示例
static $secret_key = "a secret Key";
class secret_key_Test extends PHPUnit_Framework_TestCase
{
function test_secret_key()
{
global $secret_key;
$this->assertEquals($secret_key, "a secret Key");
}
}
>> Failed asserting that 'a secret Key' matches expected null
任何帮助将不胜感激
更新: 我试过删除静态并添加
protected $backupGlobals = FALSE;
到类声明没有成功。
【问题讨论】:
-
呵呵,全局变量是你开始单元测试时应该摆脱的,因为隔离和状态
-
顺便说一句,你可能想说
global $secret_key = "a secret Key";而不是static,不是吗? -
应该删除
static关键字。global仅在函数/方法中才有意义。 -
@zerkms 是的,永远不应该使用全局变量,但不幸的是 phpunit 也会删除本地启动的变量(在特定的单元测试类中受到保护)。这是错误的,应该由开发人员决定哪些变量将通过 setUp() 和 tearDown() 清除。例如,当我测试 Web 服务时,我只需要一个登录名,我想在多次测试中重复使用它 - 但是 phpunit 总是删除启动的实例并强制我进行多次身份验证。错了。
-
@lubosdz:那是隔离