1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: 20807 -->
<sect1 id="zend.test.phpunit" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Zend_Test_PHPUnit</title>
<para>
<classname>Zend_Test_PHPUnit</classname> bietet einen Testfall für <acronym>MVC</acronym>-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.
</para>
<example id="zend.test.phpunit.loginexample">
<title>Beispiel eines Testfalls für ein Anwendungs-Login</title>
<para>
Das folgende ist ein einfacher Testfall für einen <classname>UserController</classname>,
um verschiedene Dinge zu prüfen:
</para>
<itemizedlist>
<listitem>
<para>
Das Login-Formular soll nicht-authentifizierten Benutzern angezeigt werden.
</para>
</listitem>
<listitem>
<para>
Wenn sich ein Benutzer einloggt, soll er zu seiner Profilseite umgeleitet
werden und diese Profilseite soll relevante Informationen enthalten.
</para>
</listitem>
</itemizedlist>
<para>
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).
</para>
<programlisting language="php"><![CDATA[
class UserControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
public function setUp()
{
$this->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');
}
}
]]></programlisting>
<para>
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.
</para>
</example>
<xi:include href="Zend_Test-PHPUnit-Bootstrapping.xml" />
<xi:include href="Zend_Test-PHPUnit-Testing.xml" />
<xi:include href="Zend_Test-PHPUnit-Assertions.xml" />
<xi:include href="Zend_Test-PHPUnit-Examples.xml" />
</sect1>
|