アサーション
注意:このドキュメントでは、英語版のリビジョン 22761 の更新内容をスキップしています。
アサーションは、ユニットテストの肝となるものです。
この機能を使うことで、期待する結果と実際の結果が一致することを確かめるのです。
Zend_Test_PHPUnit_ControllerTestCase
では数多くのアサーションを用意しており、
MVC アプリケーションやコントローラのテストをよりシンプルにできるようにしています。
CSS セレクタアサーション
CSS セレクタを使うと、
レスポンスの中身に何らかの結果が入っていることを簡単に検証できます。
また、Javascript の UI や AJAX との統合も簡単に行えます。
大半の JS ツールキットは、
CSS セレクタ形式で DOM 要素を取得するための仕組みを持っています。
それと同じ構文で使用できるのです。
この機能は Zend_Dom_Query
を用いて実装されており、'Query' アサーションに統合されています。
個々のアサーションの最初の引数に CSS セレクタを指定し、
アサーションの型に応じてオプション引数やエラーメッセージも指定します。
CSS セレクタの書き方の規則については、Zend_Dom_Query
の操作方法の章
を参照ください。Query アサーションには次のようなものがあります。
assertQuery($path, $message = ''):
指定した CSS セレクタにマッチするひとつあるいは複数の DOM
要素が存在することを表明します。
$message を指定すると、
存在しなかった場合のメッセージの先頭にそれが追加されます。
assertQueryContentContains($path, $match, $message =
''):
指定した CSS セレクタにマッチするひとつあるいは複数の DOM
要素が存在し、そのすくなくともひとつに $match
で指定した内容が含まれることを表明します。
$message を指定すると、
存在しなかった場合のメッセージの先頭にそれが追加されます。
assertQueryContentRegex($path, $pattern, $message =
''):
指定した CSS セレクタにマッチするひとつあるいは複数の DOM
要素が存在し、そのすくなくともひとつに正規表現
$pattern にマッチする内容が含まれることを表明します。
$message を指定すると、
存在しなかった場合のメッセージの先頭にそれが追加されます。
assertQueryCount($path, $count, $message =
''):
指定した CSS セレクタにマッチする DOM 要素が、ちょうど
$count 個存在することを表明します。
$message を指定すると、
存在しなかった場合のメッセージの先頭にそれが追加されます。
assertQueryCountMin($path, $count, $message =
''):
指定した CSS セレクタにマッチする DOM 要素が、少なくとも
$count 個以上存在することを表明します。
$message を指定すると、
存在しなかった場合のメッセージの先頭にそれが追加されます。
注意:
$count に 1 を指定した場合は、単に
assertQuery() を使うのと同じ意味となります。
assertQueryCountMax($path, $count, $message =
''):
指定した CSS セレクタにマッチする DOM 要素が、最大でも
$count 個以下しか存在しないことを表明します。
$message を指定すると、
存在しなかった場合のメッセージの先頭にそれが追加されます。
注意:
$count に 1 を指定した場合は、単に
assertQuery() を使うのと同じ意味となります。
さらに、上であげたそれぞれに対する否定のアサーションを行う
'Not' 系のメソッドが存在します。
assertNotQuery()、
assertNotQueryContentContains()、
assertNotQueryContentRegex() そして
assertNotQueryCount() です
(min および max については対応するメソッドは存在しませんが、
それは自明なことだからです)。
XPath アサーション
CSS セレクタよりも XPath のほうが使いやすいという開発者もいることでしょう。
そこで、 Query
アサーション
のすべてのメソッドに対して、同等の動作をする XPath
版のメソッドを用意しています。
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 = '')
リダイレクトアサーション
アクションがリダイレクトを行うこともよくあります。
リダイレクト先をたどらなくても、
Zend_Test_PHPUnit_ControllerTestCase
のさまざまなアサーションでそれをテストできます。
assertRedirect($message = ''):
リダイレクトが発生することを表明します。
assertNotRedirect($message = ''):
リダイレクトが発生しないことを表明します。
assertRedirectTo($url, $message = ''):
リダイレクトが発生し、Location ヘッダの値が
$url で指定したものであることを表明します。
assertNotRedirectTo($url, $message = ''):
「リダイレクトが発生しない」あるいは「リダイレクト先の Location
ヘッダの値が $url で指定したものではない」
のいずれかであることを表明します。
assertRedirectRegex($pattern, $message = ''):
リダイレクトが発生し、Location ヘッダの値が
$pattern で指定した正規表現にマッチするものであることを表明します。
assertNotRedirectRegex($pattern, $message = ''):
「リダイレクトが発生しない」あるいは「リダイレクト先の Location
ヘッダの値が $pattern
で指定した正規表現にマッチしない」のいずれかであることを表明します。
リクエストアサーション
最後に実行されたアクションやコントローラ、
そしてモジュールについてのアサーションを行えると便利です。
さらに、どのルートにマッチしたのかを確認したいこともあるでしょう。
以下のアサーションが、その手助けとなります。
assertModule($module, $message = ''):
指定したモジュールが、
最後にディスパッチされたアクションで用いられたことを表明します。
assertController($controller, $message = ''):
指定したコントローラが、
最後にディスパッチされたアクションで選択されたことを表明します。
assertAction($action, $message = ''):
指定したアクションが、直近にディスパッチされたことを表明します。
assertRoute($route, $message = ''):
指定した名前のルートが、ルータでマッチしたことを表明します。
そして、それぞれについて否定を表す
'Not' 系のメソッドが存在します。