Die Idee ist einfach, den ursprünglichen bekannten Zustand zwischen den Tests wiederherzustellen. Statische Eigenschaften sind im Wesentlichen die gleichen wie globale Variablen. Betrachten
class TestSubject
{
public static $i = 0;
public function __construct() { self::$i++; }
}
nun annehmen, dass Sie neue Instanzen von TestSubject
in Ihrem Test des Setup-Methode erstellen. Da die statischen Eigenschaften von allen Instanzen einer Klasse gemeinsam genutzt werden, wird TestSubject::i
jedes Mal größer, wenn Sie eine neue Instanz erstellen. Es wird nicht zurückgesetzt. Es behält seinen Zustand global bei. Dies ist bei Unit-Tests unerwünscht, denn um zuverlässige Tests schreiben zu können, benötigen Sie einen isolierten, reproduzierbaren und bekannten Zustand. Daher müssen geschützte Member zwischen Testfällen zurückgesetzt werden, die Sie in PHPUnit mit der @backupStaticAttributes
Annotation aktivieren können.
Beispiel:
/**
* @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);
}
}
Wenn Sie die Anmerkung entfernen, wird der dritte Test nicht bestehen.
Können Sie mit dem manuellen Abschnitt verlinken? –