L'idée est simplement de restaurer l'état initial connu entre les tests. Les propriétés statiques sont essentiellement les mêmes que les variables globales. Considérez
class TestSubject
{
public static $i = 0;
public function __construct() { self::$i++; }
}
Supposons maintenant que vous créer de nouvelles instances de TestSubject
dans la méthode de configuration de votre test. Étant donné que les propriétés statiques sont partagées entre toutes les instances d'une classe, TestSubject::i
augmentera chaque fois que vous créez une nouvelle instance. Il ne sera pas réinitialisé. Il maintient son état globalement. Ceci est indésirable avec les tests unitaires parce que pour écrire des tests fiables, vous avez besoin d'un état isolé, reproductible et connu. Ainsi, les membres protégés doivent être réinitialisés entre les cas de test, que vous pouvez activer dans PHPUnit avec l'annotation @backupStaticAttributes
.
Exemple:
/**
* @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);
}
}
Si vous supprimez l'annotation, le troisième test échouera.
Pouvez-vous créer un lien vers la section du manuel? –