symfony でのテストは機能テスト(functional test)、単体テスト(unit test)が標準でサポートされており、それぞれ以下の特徴があります。
□機能テスト
– モジュール生成時に test/functional に自動生成される。
– test/{$app}/{$module}ActionsTest.php というファイル名($app,$module はそれぞれテスト対象のアプリケーション名とモジュール名)
– テスト用仮想 symfony サイトブラウザ クラスの sfTestBrowser を使ったモジュール単位のテストが中心。
– 最初からデフォルトのテスト実装がある
(ver 1.0.6 時点のデフォルトテスト実装は、モジュールの index アクションが初期のままではないかをテストするというもの)
– テスト実行は
symfony test-functional <appname>
もしくは
symfony test-all
で行う
□単体テスト
– 機能テストのような自動生成はされないが、test/bootstrap/unit.php をインクルードすることで容易にテストを作成可能。
– test/unit/{$testName}Test.php というファイル名($testName は任意の名前)
– 汎用単体テストクラス lime_test を使った、ライブラリ等のクラスを対象にした個別のテストが中心。
– テスト実行は
symfony test-unit
もしくは
symfony test-all
で行う
なお、単体、機能どちらのテストも
php test/functional/appname/fooActionsTest.php
のように PHP スクリプトとして実行すると、そのテストだけを実行することができます。
このようにすることで、失敗したテストがどの項目で失敗したかを調べることができます。
■sfTestBrowser クラス
sfBrowser クラスのテスト用実装版(sfBrowser の子クラス)。
sfBrowser クラスはTCP 等ネットワーク通信を伴わずに symfony サイト内ページのブラウジング可能な仮想ブラウザ実装です。
■lime_test クラス
lime の汎用単体テストクラス。
lime は symfony チーム開発のユニットテストユーティリティです。
備考:
どちらのクラスについても、メソッドの戻り値いがオブジェクト自身のインスタンスを返してくれるので
$t->get(…)->is…(…)->is…(…)
のようにテストのチェインができるため、SimpleTest などの xUnit 互換のものより記述が容易になっています。
参考:
– sfTestBrowser (symfony API)
– sfBrowser (symfony API)
– lime_test class
(lime_test クラスの phpdoc ドキュメント)
– 新しく採用されたテスティングフレームワークlimeの紹介(symfony で開発日記)
lime_test クラスメソッドの日本語説明など。
– Chapter 15 – Unit And Fanctional Testing(The Definitive Guide to symfony)
– 15章 単体テストと機能テスト(上のリンクの日本語訳版)