Идея состоит в том, чтобы просто восстановить начальное известное состояние между тестами.Статические свойства по сути такие же, как глобальные переменные.Рассмотрим
class TestSubject
{
public static $i = 0;
public function __construct() { self::$i++; }
}
Теперь предположим, что вы создаете новые экземпляры TestSubject
в методе настройки вашего теста.Поскольку статические свойства являются общими для всех экземпляров класса, TestSubject::i
будет увеличиваться при каждом создании нового экземпляра.Это не будет сброшено.Это поддерживает его состояние во всем мире.Это нежелательно при модульных тестах, потому что для написания надежных тестов вам необходимо изолированное, воспроизводимое и известное состояние.Таким образом, защищенные элементы должны быть сброшены между тестовыми примерами, которые можно включить в PHPUnit с аннотацией @backupStaticAttributes
.
Пример:
/**
* @backupStaticAttributes enabled
*/
class Test extends PHPUnit_Framework_TestCase
{
public function testInitialValueOfStaticMemberIsZero()
{
$this->assertSame(0, TestSubject::$i);
}
/**
* @depends testInitialValueOfStaticMemberIsZero
*/
public function testCreatingInstancesIncreasesStaticMember()
{
new TestSubject();
new TestSubject();
new TestSubject();
$this->assertSame(3, TestSubject::$i);
}
/**
* @depends testCreatingInstancesIncreasesStaticMember
*/
public function testStaticMembersAreResetBetweenTests()
{
$this->assertSame(0, TestSubject::$i);
}
}
Если удалить аннотацию, третьтест не пройден.