PHPUnit хранит свойства в тестовом классе
Я новичок в 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 новые свойства после каждого выполнения теста? Есть ли способ задать свойство в тесте, чтобы оно было доступно в других тестах того же тестового класса?
2 answers
Вы устанавливаете свойство foo внутри метода testFirst()
. PHPUnit сбросит среду между тестами/создаст новый экземпляр "NEWTest" для каждого метода тестирования, если у них нет аннотации @depends), поэтому, если вы хотите, чтобы foo
было установлено в true
, вам нужно воссоздать это состояние в зависимом тесте или использовать метод setup()
.
С setup()
( документы):
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
( документы):
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. Это было просто неправильно.