Zend_Test_PHPUnit
Zend_Test_PHPUnit bietet einen Testfall für MVC-Anwendungen,
der Zusicherungen für Tests auf eine Vielzahl von Verantwortlichkeiten enthält. Um
zu verstehen, was man damit machen kann, ist es wahrscheinlich am einfachsten, sich das folgende
Beispiel anzusehen.
Beispiel eines Testfalls für ein Anwendungs-Login
Das folgende ist ein einfacher Testfall für einen UserController,
um verschiedene Dinge zu prüfen:
Das Login-Formular soll nicht-authentifizierten Benutzern angezeigt werden.
Wenn sich ein Benutzer einloggt, soll er zu seiner Profilseite umgeleitet
werden und diese Profilseite soll relevante Informationen enthalten.
Dieses spezielle Beispiel setzt ein paar Dinge voraus. Zunächst verschieben wir das meiste
unseres Bootstrappings in ein Plugin. Das vereinfacht das Setup des Testfalls, da es uns
erlaubt, unsere Umgebung gezielt zu definieren und die
Anwendung mit einer einzigen Zeile zu starten. Außerdem setzt unser spezielles Beispiel auch
voraus, dass das automatische Laden von Klassen aktiviert ist, so dass wir uns nicht um das Laden
der benötigten Klassen kümmern müssen (wie die richtigen Controller, Plugins, usw).
bootstrap = array($this, 'appBootstrap');
parent::setUp();
}
public function appBootstrap()
{
$this->frontController
->registerPlugin(new Bugapp_Plugin_Initialize('development'));
}
public function testCallWithoutActionShouldPullFromIndexAction()
{
$this->dispatch('/user');
$this->assertController('user');
$this->assertAction('index');
}
public function testIndexActionShouldContainLoginForm()
{
$this->dispatch('/user');
$this->assertAction('index');
$this->assertQueryCount('form#loginForm', 1);
}
public function testValidLoginShouldGoToProfilePage()
{
$this->request->setMethod('POST')
->setPost(array(
'username' => 'foobar',
'password' => 'foobar'
));
$this->dispatch('/user/login');
$this->assertRedirectTo('/user/view');
$this->resetRequest()
->resetResponse();
$this->request->setMethod('GET')
->setPost(array());
$this->dispatch('/user/view');
$this->assertRoute('default');
$this->assertModule('default');
$this->assertController('user');
$this->assertAction('view');
$this->assertNotRedirect();
$this->assertQuery('dl');
$this->assertQueryContentContains('h2', 'User: foobar');
}
}
]]>
Dieses Beispiel könnte auch einfacher geschrieben werden -- nicht alle der gezeigten
Zusicherungen sind notwendig. Hoffentlich zeigt es, wie einfach es sein kann, die eigene
Anwendung zu testen.