# Behauptungen

Behauptungen sind der Herz vom Unit Testen; Sie können verwendet werden um zu Prüfen dass die Ergebnisse das sind was man erwartet. Zu diesem Zweck bietet `Zend_Test_PHPUnit_ControllerTestCase` eine Anzahl an Behauptungen um das Testen eigene MVC Anwendungen und Controller einfacher zu machen.

## CSS Selektor Behauptungen

CSS 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 AJAX Integrationen notwendig sind, vorhanden sind; die meisten JS Toolkits bieten einige Mechanismen an für das Abholen von DOM Elementen die auf CSS Selektoren basieren, so das der Syntax der gleiche wäre.

Diese Funktionalität wird über Zend_Dom_Query angeboten, und in ein Set von 'Query' Behauptungen integriert. Jede dieser Behauptungen nimmt als erstes Argument einen CSS Selektor, mit optional hinzugefügten Argumenten und/oder einer Fehlermeldung, basierend auf dem Typ der Behauptung. Die Regeln für das Schreiben der CSS Selektoren kann im Kapitel Theorie der Anwendung von Zend_Dom_Query gefunden werden. Abfragebehauptungen enthalten:

- `assertQuery($path, $message = '')`: Nimmt an das ein oder mehrere DOM Elemente, die dem gegebenen CSS Selektor entsprechen, vorhanden sind. Wenn eine `$message` vorhanden ist, wird diese jeder fehlgeschlagenen Meldung einer Behauptung vorangestellt.

- `assertQueryContentContains($path, $match, $message = '')`: Nimmt an das ein oder mehrere DOM Elemente, die dem angegebenen CSS Selektor entsprechen, vorhanden sind, und das zumindest einer dem Inhalt, der in `$match` angegeben wurde, entspricht. Wenn eine `$message` vorhanden ist, wird diese jeder fehlgeschlagenen Meldung einer Behauptung vorangestellt.

- `assertQueryContentRegex($path, $pattern, $message = '')`: Nimmt an das ein oder mehrere DOM Elemente, die dem angegebenen CSS Selektor entsprechen, vorhanden sind, und das zumindest einer dem Regulären Ausdruck der in `$pattern` angegeben wurde, entspricht. Wenn eine `$message` vorhanden ist, wird diese jeder fehlgeschlagenen Meldung einer Behauptung vorangestellt.

- `assertQueryCount($path, $count, $message = '')`: Nimmt an das exakt `$count` DOM Elemente dem angegebenen CSS Selektor entsprechen. Wenn eine `$message` vorhanden ist, wird diese jeder fehlgeschlagenen Meldung einer Behauptung vorangestellt.

- `assertQueryCountMin($path, $count, $message = '')`: Nimmt an das zumindest `$count` DOM Element dem angegebenen CSS Selektor entsprechen. Wenn eine `$message` vorhanden ist, wird diese jeder fehlgeschlagenen Meldung einer Behauptung vorangestellt. Achtung: Die Spezifizierung eines Wertes von 1 für `$count` ist das Gleiche wie die einfache Verwendung von `assertQuery()`.

- `assertQueryCountMax($path, $count, $message = '')`: Nimmt an das es nicht mehr als `$count` DOM Elemente gibt die dem angegebenen CSS Selektor entsprechen. Wenn eine `$message` vorhanden ist, wird diese jeder fehlgeschlagenen Meldung einer Behauptung vorangestellt. Achtung: Die Spezifizierung eines Wertes von 1 für `$count` ist das Gleiche wie die einfache Verwendung von `assertQuery()`.

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

## XPath Behauptungen

Einige Entwickler sind mit XPath vertrauter als mit CSS Selektoren, und deshalb werden für alle Abfrage Behauptungen auch XPath Varianten engeboten. Diese sind:

- `assertXpath($path, $message = '')`

- `assertNotXpath($path, $message = '')`

- `assertXpathContentContains($path, $match, $message = '')`

- `assertNotXpathContentContains($path, $match, $message = '')`

- `assertXpathContentRegex($path, $pattern, $message = '')`

- `assertNotXpathContentRegex($path, $pattern, $message = '')`

- `assertXpathCount($path, $count, $message = '')`

- `assertNotXpathCount($path, $count, $message = '')`

- `assertXpathCountMin($path, $count, $message = '')`

- `assertNotXpathCountMax($path, $count, $message = '')`

## Umleitungs Behauptungen

Oft wird eine Aktion umgeleitet. Statt der Umleitung zu folgen erlaubt es `Zend_Test_PHPUnit_ControllerTestCase` diese Umleitungen mit einer handvoll von Behauptungen zu Testen.

- `assertRedirect($message = '')`: Nimmt einfach an das eine Umleitung stattgefunden hat.

- `assertNotRedirect($message = '')`: Nimmt einfach an das keine Umleitung stattgefunden hat.

- `assertRedirectTo($url, $message = '')`: Nimmt an das eine Umleitung stattgefunden hat, und das der Wert des Ziel Headers die angegebene `$url` ist.

- `assertNotRedirectTo($url, $message = '')`: Nimmt an das eine Umleitung entweder NICHT stattgefunden hat, oder das der Wert des Ziel Headers NICHT die angegebene `$url` ist.

- `assertRedirectRegex($pattern, $message = '')`: Nimmt an das eine Umleitung stattgefunden hat, und das der Wert des Ziel Headers dem durch `$pattern` angegebenen regulären Ausdruck entspricht.

- `assertNotRedirectRegex($pattern, $message = '')`: Nimmt an das eine Umleitung entweder NICHT stattgefunden hat, oder das der Wert des Ziel Headers NICHT dem durch `$pattern` angegebenen regulären Ausdruck entspricht.

## Antwort Header Behauptungen

Zusätzlich zur Prüfung auf Umleitungs Header, ist es oft notwendig auf spezielle HTTP 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 JSON Antworten die entsprechenden Content-Type Header enthält. Die folgenden Behauptungen sind vorhanden.

- `assertResponseCode($code, $message = '')`: Nimmt an das die Antwort zum gegebenen HTTP Antwort Code geführt hat.

- `assertHeader($header, $message = '')`: Nimmt an das die Antwort den gegebenen Header enthält.

- `assertHeaderContains($header, $match, $message = '')`: Nimmt an das die Antwort den gegebenen Header enthält und das sein Inhalt den gegebenen String enthält.

- `assertHeaderRegex($header, $pattern, $message = '')`: Nimmt an das die Antwort den gegebenen Header enthält und das sein Inhalt der gegebenen Regex entspricht.

Zusätzlich hat jede der obigen Behauptungen eine 'Not' Variante für negative Behauptungen.

## Anfrage Behauptungen

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 Behauptungen können in diesen Fällen helfen:

- `assertModule($module, $message = '')`: Nimmt an dass das angegebene Modul in der letzten Dispatch Aktion verwendet wurde.

- `assertController($controller, $message = '')`: Nimmt an das der angegebene Controller in der letzten ausgeführten Aktion ausgewählt wurde.

- `assertAction($action, $message = '')`: Nimmt an das die angegebene Aktion zuletzt ausgeführt wurde.

- `assertRoute($route, $message = '')`: Nimmt an das die angegebene benannte Route dem Router entsprochen hat.

Jede hat auch eine 'Not' Variante für negative Behauptungen.