<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 17227 -->
<!-- Reviewed: no -->
<sect2 id="zend.test.phpunit.assertions">
    <title>Ausnahmen</title>

    <para>
        Ausnahmen sind der Herz vom Unit Testen; Sie können verwendet werden um zu prüfen das die
        Ergebnisse das sind was man erwartet. Zu diesem Zweck bietet
        <classname>Zend_Test_PHPUnit_ControllerTestCase</classname> eine Anzahl an Ausnahmen um das
        Testen eigene <acronym>MVC</acronym> Anwendungen und Controller einfacher zu machen.
    </para>

    <sect3 id="zend.test.phpunit.assertions.query">
        <title>CSS Selektor Ausnahmen</title>

        <para>
            <acronym>CSS</acronym> Selektoren sind ein einfacher Weg um zu Prüfen das bestimmte
            Teile im Inhalt der Antwort enthalten sind. Mit Ihnen ist es auch trivial
            sicherzustellen das Elemente die für Javascript UIs und/oder <acronym>AJAX</acronym>
            Integrationen notwendig sind, vorhanden sind; die meisten JS Toolkits bieten einige
            Mechanismen an für das Abholen von DOM Elementen die auf <acronym>CSS</acronym>
            Selektoren basieren, so das der Syntax der gleiche wäre.
        </para>

        <para>
            Diese Funktionalität wird über <link linkend="zend.dom.query">Zend_Dom_Query</link>
            angeboten, und in ein Set von 'Query' Ausnahmen integriert. Jede dieser Ausnahmen nimmt
            als erstes Argument einen <acronym>CSS</acronym> Selektor, mit optional hinzugefügten
            Argumenten und/oder einer Fehlermeldung, basierend auf dem Ausnahmetyp. Die Regeln für
            das schreiben der <acronym>CSS</acronym> Selektoren kann im <link
                linkend="zend.dom.query.operation">Kapitel Theorie der Anwendung von
                Zend_Dom_Query</link> gefunden werden. Abfrageausnahmen enthalten:
        </para>

        <itemizedlist>
            <listitem><para>
                <methodname>assertQuery($path, $message = '')</methodname>: Nimmt an das ein oder
                mehrere DOM Elemente, die dem gegebenen <acronym>CSS</acronym> Selektor entsprechen,
                vorhanden sind. Wenn eine <varname>$message</varname> vorhanden ist, wird diese
                jeder fehlgeschlagenen Ausnahmemeldung vorangestellt.
            </para></listitem>

            <listitem><para>
                <methodname>assertQueryContentContains($path, $match, $message = '')</methodname>:
                Nimmt an das ein oder mehrere DOM Elemente, die dem angegebenen
                <acronym>CSS</acronym> Selektor entsprechen, vorhanden sind, und das zumindest einer
                dem Inhalt, der in <varname>$match</varname> angegeben wurde, entspricht. Wenn eine
                <varname>$message</varname> vorhanden ist, wird diese jeder fehlgeschlagenen
                Ausnahmemeldung vorangestellt.
            </para></listitem>

            <listitem><para>
                <methodname>assertQueryContentRegex($path, $pattern, $message = '')</methodname>:
                Nimmt an das ein oder mehrere DOM Elemente, die dem angegebenen
                <acronym>CSS</acronym> Selektor entsprechen, vorhanden sind, und das zumindest einer
                dem Regulären Ausdruck der in <varname>$pattern</varname> angegeben wurde,
                entspricht. Wenn eine <varname>$message</varname> vorhanden ist, wird diese jeder
                fehlgeschlagenen Ausnahmemeldung vorangestellt.
            </para></listitem>

            <listitem><para>
                <methodname>assertQueryCount($path, $count, $message = '')</methodname>:  Nimmt an
                das exakt <varname>$count</varname> DOM Elemente dem angegebenen
                <acronym>CSS</acronym> Selektor entsprechen. Wenn eine <varname>$message</varname>
                vorhanden ist, wird diese jeder fehlgeschlagenen Ausnahmemeldung vorangestellt.
            </para></listitem>

            <listitem><para>
                <methodname>assertQueryCountMin($path, $count, $message = '')</methodname>: Nimmt an
                das zumindest <varname>$count</varname> DOM Element dem angegebenen
                <acronym>CSS</acronym> Selektor entsprechen. Wenn eine <varname>$message</varname>
                vorhanden ist, wird diese jeder fehlgeschlagenen Ausnahmemeldung vorangestellt.
                <emphasis>Achtung:</emphasis> Die Spezifizierung eines Wertes von 1 für
                <varname>$count</varname> ist das Gleiche wie die einfache Verwendung von
                <methodname>assertQuery()</methodname>.
            </para></listitem>

            <listitem><para>
                <methodname>assertQueryCountMax($path, $count, $message = '')</methodname>: Nimmt an
                das es nicht mehr als <varname>$count</varname> DOM Elemente gibt die dem
                angegebenen <acronym>CSS</acronym> Selektor entsprechen. Wenn eine
                <varname>$message</varname> vorhanden ist, wird diese jeder fehlgeschlagenen
                Ausnahmemeldung vorangestellt. <emphasis>Achtung:</emphasis> Die Spezifizierung
                eines Wertes von 1 für <varname>$count</varname> ist das Gleiche wie die einfache
                Verwendung von <methodname>assertQuery()</methodname>.
            </para></listitem>
        </itemizedlist>

        <para>
            Zusätzlich hat jede der obigen Methoden eine 'Not' Variante die eine negative Ausnahme
            anbietet: <methodname>assertNotQuery()</methodname>,
            <methodname>assertNotQueryContentContains()</methodname>,
            <methodname>assertNotQueryContentRegex()</methodname>, und
            <methodname>assertNotQueryCount()</methodname>. (Es ist zu beachten das die min und max
            Zählen keine dieser Varianten haben, was aus logischen Gründen so ist.)
        </para>
    </sect3>

    <sect3 id="zend.test.phpunit.assertions.xpath">
        <title>XPath Ausnahmen</title>

        <para>
            Einige Entwickler sind mit XPath vertrauter als mit <acronym>CSS</acronym> Selektoren,
            und deshalb werden für alle <link linkend="zend.test.phpunit.assertions.query">Query
                Ausnahmen</link> auch XPath Varianten engeboten. Diese sind:
        </para>

        <itemizedlist>
            <listitem><para>
                <methodname>assertXpath($path, $message = '')</methodname>
            </para></listitem>
            <listitem><para>
                <methodname>assertNotXpath($path, $message = '')</methodname>
            </para></listitem>
            <listitem><para>
                <methodname>assertXpathContentContains($path, $match, $message = '')</methodname>
            </para></listitem>
            <listitem><para>
                <methodname>assertNotXpathContentContains($path, $match, $message = '')</methodname>
            </para></listitem>
            <listitem><para>
                <methodname>assertXpathContentRegex($path, $pattern, $message = '')</methodname>
            </para></listitem>
            <listitem><para>
                <methodname>assertNotXpathContentRegex($path, $pattern, $message = '')</methodname>
            </para></listitem>
            <listitem><para>
                <methodname>assertXpathCount($path, $count, $message = '')</methodname>
            </para></listitem>
            <listitem><para>
                <methodname>assertNotXpathCount($path, $count, $message = '')</methodname>
            </para></listitem>
            <listitem><para>
                <methodname>assertXpathCountMin($path, $count, $message = '')</methodname>
            </para></listitem>
            <listitem><para>
                <methodname>assertNotXpathCountMax($path, $count, $message = '')</methodname>
            </para></listitem>
        </itemizedlist>
    </sect3>

    <sect3 id="zend.test.phpunit.assertions.redirect">
        <title>Umleitungs Ausnahmen</title>

        <para>
            Oft wird eine Aktion umgeleitet. Statt der Umleitung zu folgen erlaubt es
            <classname>Zend_Test_PHPUnit_ControllerTestCase</classname> diese Umleitungen mit einer
            handvoll von Ausnahmen zu testen.
        </para>

        <itemizedlist>
            <listitem><para>
                <methodname>assertRedirect($message = '')</methodname>: Nimmt einfach an das eine
                Umleitung stattgefunden hat.
            </para></listitem>

            <listitem><para>
                <methodname>assertNotRedirect($message = '')</methodname>: Nimmt einfach an das
                keine Umleitung stattgefunden hat.
            </para></listitem>

            <listitem><para>
                <methodname>assertRedirectTo($url, $message = '')</methodname>: Nimmt an das eine
                Umleitung stattgefunden hat, und das der Wert des Ziel Headers die angegebene
                <varname>$url</varname> ist.
            </para></listitem>

            <listitem><para>
                <methodname>assertNotRedirectTo($url, $message = '')</methodname>: Nimmt an das eine
                Umleitung entweder NICHT stattgefunden hat, oder das der Wert des Ziel Headers NICHT
                die angegebene <varname>$url</varname> ist.
            </para></listitem>

            <listitem><para>
                <methodname>assertRedirectRegex($pattern, $message = '')</methodname>: Nimmt an das
                eine Umleitung stattgefunden hat, und das der Wert des Ziel Headers dem durch
                <varname>$pattern</varname> angegebenen regulären Ausdruck entspricht.
            </para></listitem>

            <listitem><para>
                <methodname>assertNotRedirectRegex($pattern, $message = '')</methodname>: Nimmt an
                das eine Umleitung entweder NICHT stattgefunden hat, oder das der Wert des Ziel
                Headers NICHT dem durch <varname>$pattern</varname> angegebenen regulären Ausdruck
                entspricht.
            </para></listitem>
        </itemizedlist>
    </sect3>

    <sect3 id="zend.test.phpunit.assertions.header">
        <title>Antwort Header Ausnahmen</title>

        <para>
            Zusätzlich zur Prüfung auf Umleitungs Header, ist es oft notwendig auf spezielle
            <acronym>HTTP</acronym> Antwort Codes und Header zu prüfen -- zum Beispiel, um zu
            erkennen um eine Aktion eine 404 oder 500 Antwort hervorruft, oder um sicherzustellen
            das <acronym>JSON</acronym> Antworten die entsprechenden Content-Type Header enthält.
            Die folgenden Ausnahmen sind vorhanden.
        </para>

        <itemizedlist>
            <listitem><para>
                <methodname>assertResponseCode($code, $message = '')</methodname>: Nimmt an das die
                Antwort zum gegebenen <acronym>HTTP</acronym> Antwort Code geführt hat.
            </para></listitem>

            <listitem><para>
                <methodname>assertHeader($header, $message = '')</methodname>: Nimmt an das die
                Antwort den gegebenen Header enthält.
            </para></listitem>

            <listitem><para>
                <methodname>assertHeaderContains($header, $match, $message = '')</methodname>: Nimmt
                an das die Antwort den gegebenen Header enthält und das sein Inhalt den gegebenen
                String enthält.
            </para></listitem>

            <listitem><para>
                <methodname>assertHeaderRegex($header, $pattern, $message = '')</methodname>: Nimmt
                an das die Antwort den gegebenen Header enthält und das sein Inhalt der gegebenen
                Regex entspricht.
            </para></listitem>
        </itemizedlist>

        <para>
            Zusätzlich hat jede der obigen Ausnahmen eine 'Not' Variante für negative Ausnahmen.
        </para>
    </sect3>

    <sect3 id="zend.test.phpunit.assertions.request">
        <title>Anfrage Ausnahmen</title>

        <para>
            Es ist oft sinnvoll gegen die letzte Aktion, den Controller und das Modul zu prüfen;
            zusätzlich ist es möglich die genommene Route die prüfen. Die folgenden Ausnahmen können
            in diesen Fällen helfen:
        </para>

        <itemizedlist>
            <listitem><para>
                <methodname>assertModule($module, $message = '')</methodname>: Nimmt an das das
                angegebene Modul in der letzten Dispatch Aktion verwendet wurde.
            </para></listitem>
            <listitem><para>
                <methodname>assertController($controller, $message = '')</methodname>: Nimmt an das
                der angegebene Controller in der letzten ausgeführten Aktion ausgewählt wurde.
            </para></listitem>
            <listitem><para>
                <methodname>assertAction($action, $message = '')</methodname>: Nimmt an das die
                angegebene Aktion zuletzt ausgeführt wurde.
            </para></listitem>
            <listitem><para>
                <methodname>assertRoute($route, $message = '')</methodname>: Nimmt an das die
                angegebene benannte Route dem Router entsprochen hat.
            </para></listitem>
        </itemizedlist>

        <para>
            Jede hat auch eine 'Not' Variante für negative Ausnahmen.
        </para>
    </sect3>
</sect2>
<!--
vim:se ts=4 sw=4 et:
-->
