# 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).

    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');
        }
    }

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.