我是PHPUnit的初学者。
这是我创建的一个示例测试类:
class NewTest extends PHPUnit_Framework_TestCase
{
protected $foo;
function testFirst ()
{
$this->foo = true;
$this->assertTrue($this->foo);
}
/**
* @depends testFirst
*/
function testSecond ()
{
$this->assertTrue($this->foo);
}
}
当执行testSecond时,它将引发错误,提示“
Undefined property NewTest::$foo
”。为什么会这样?每次执行测试后,PHPUnit都会清除新属性吗?是否可以在测试中设置属性,以便在同一测试类的其他测试中可以访问该属性?
最佳答案
您正在testFirst()
方法内设置foo属性。 PHPUnit将重置测试之间的环境/如果每个测试方法都没有@depends批注,则为每个测试方法创建一个新实例“NewTest”),因此,如果要将foo
设置为true
,则必须在相关测试或使用setup()
方法。
使用setup()
(docs):
class NewTest extends PHPUnit_Framework_TestCase
{
protected $foo;
protected function setup()
{
$this->foo = TRUE;
}
function testFirst ()
{
$this->assertTrue($this->foo);
}
/**
* @depends testFirst
*/
function testSecond ()
{
$this->assertTrue($this->foo);
}
}
使用
@depends
(docs):class NewTest extends PHPUnit_Framework_TestCase
{
protected $foo;
function testFirst ()
{
$this->foo = TRUE;
$this->assertTrue($this->foo);
return $this->foo;
}
/**
* @depends testFirst
*/
function testSecond($foo)
{
$this->foo = $foo;
$this->assertTrue($this->foo);
}
}
以上所有都应该通过。
编辑必须删除@backupGlobals解决方案。这是完全错误的。