PHPSymfony2のblogチュートリアルをテストコードを書きながら写経してみました。blogチュートリアルは入門編ということもあり、コントローラーにロジックが書かれています。そのままではユニットテストを書くことが難しかったため、アプリケーションの機能を上位レイヤーから検証するファンクショナルテストを書きました。具体的には、リクエストに対するレスポンス内容の検証や、データベースに接続してテーブルの中身が正しく更新されているかを検証するテストを書きました。テストとしては荒く不完全ですが、コードに変更を加えたときに、過去に作ったものが著しく壊れていないことは確認できます。この記事のソースコードは章ごとにタグを打ってgithubに置いてあります。登録ページのバリデーションのファンクショナルテスト10章までチュートリアルを進めるfixtureでテストの順番の依存性を解決テストを書く前の準備エディタからPHPUnitを実行できる環境を整えましょう。エディタからPHPUnitが実行できると、開発のリズムと楽しさが全然違います。私と同じくVimを使用されている方はこちらの記事が参考になるかもしれません。VimからPHPUnitを実行する環境を整えるSymfony2のテストをVimのquickrunから実行するVimでPHPUnitの実行結果をシンプルに表示するプラグインを書いたコマンドラインからSymfony2ので作成したアプリケーションのテストを実行する方法も残しておきます。下記は、Symfony2の本体が~/Sites/Symfonyにある場合の例です。ディレクトリを指定する所がポイントです。引数にファイルを指定すればそのファイルのテストだけを実行することもできます。テンプレートの作成までチュートリアルを進めます。ここまで完了すると、ブログの一覧を表示するページとブログの詳細を表示するページができているはずです。これらのページのファンクショナルテストを以下のように書きました。テストを成功させるにはPostテーブルにあらかじめデータを登録しておく必要があります。}}ざっくり解説すると下記のことを行なっています。GETリクエストを送信。記事の追加までチュートリアルを進めます。この章では、ブログを登録するページを作成します。登録ページのファンクショナルテストは以下のように書きました。詳細ページのテストも修正しています。}}解説は下記になります。formに値を設定し、formをsubmit。データベースに接続し、Postテーブルにデータが登録されているか検証。詳細ページのテストを登録したデータを参照するようにリファクタリング。データのバリデーションまでチュートリアルを進めます。この章では、登録するページに入力エラーチェックを追加します。バリデーションのファンクショナルテストは以下のように書きました。解説は下記になります。formにエラーとなる値を設定し、submit。200を応答し、期待するエラーメッセージが表示されるか検証。使えそうなことを後から知りました。そのうちリファクタリングします。10章までチュートリアルを進めるここまでテストを書いて感触をつかめれば、後はなんとかなると思います。テストコードを書きながら、10章までチュートリアルを進めます。残りの章では記事の削除、記事の編集などが紹介されています。コードはgithubに置いてあります。https://github.com/karakaram/symfony2-blog-tutorial/tags10章以降はリファクタリングと新機能追加について紹介されています。10章に入る前にもう少しテストの実行環境を整えます。fixtureでテストの順番の依存性を解決データの削除の章までテストを書くと、テストの順番やデータの状況によっては詳細ページのテストが失敗するようになります。参照ページや編集ページのテストも、初期データがないとテストが失敗してしまいます。テストの順番に依存性が発生しており、好ましい状況ではありません。次回の記事では、DoctrineFixturesBundleを導入してこの問題を解決します。