テスト志向この記事は、Laravel3でのテストについてのシリーズです。その1:単体テストの準備その2:例外のテストその3:Eloquentモデルのテストその4:バリデータークラスのテストその5:リポジトリークラスのテストその6:コントローラークラスのテストその7:結合テストテストの対象は、以下のシリーズで作成した、りんごテーブルに対する簡単なCRUD操作プログラムに対するものです。参照:小さなクラスで更新phpunit.xml今まで作成した各クラスに対してphpunitを使用したテストの環境を整えましょう。Laravel3ではコマンドラインツールのArtisanを利用し、phpunitを実行できます。これはphpunitの機能を制限してしまうだけで、利便性が上がるものではありません。phpunitを実行する方法をこのサイトで紹介してきましたし、フォーラムにも投稿しました。Laravel4では、コマンドラインツールから外れ、直接phpunitを実行する形式になります。phpunitはコマンドのオプションとして多くのことが指定できますが、それでは使い勝手が悪いため、オプションを定義したphpunit.xmlファイルを作成し、コマンドとしてはphpunitのみを入力、実行するのが通常の使用方法でしょう。phpunit.xmlの紹介です。インストールしたトップのディレクトリー、つまりartisanのある場所と同じディレクトリー内に設置してください。</testsuites></phpunit>今回はテストに必要な最小限度の設定を行なっています。bootstrapでLaravelのテスト用のbootstrapコードを指定しています。このbootstrapコードによりLaravelの動作環境が設定されます。最後のtestsuitesがテストの対象を指定しています。applicationディレクトリー下のtestsディレクトリー内のファイルで、サフィックスがTest.phpのものをphpunitはテスト対象として扱います。Laravelのartisanでは".test.php"です。phpunitのデフォルトに合わせて設定しています。サフィックスですのでお好みで変更してください。真ん中で定義しているのが環境変数です。Laravelは動作環境により設定ファイルを切替える仕組みになっています。実行時の環境変数にLARAVEL_ENVがあれば、その値が環境変数として使用されます。テスト実行時のみ"test"に変更しています。環境の設定テスト時は本番や開発環境とは異なったデータベースなどを使用したいでしょう。そのため、前述の方法で実行環境を"test"に変更します。テスト時に優先的に使用されるのはapplication/config/testディレクトリーの中の設定という事になります。今回はデータベースなどのデータ保管場所をメモリ上に置くことで、テストのスピードアップを行います。多くのクラスでは、設定ファイルで指定するドライバーにより、ストレージの切り替えが行えます。テスト目的のため、メモリを使用するドライバーが用意されており、テストをスピードアップできるようになっています。cache.phpです。'memory',);session.phpです。'memory',);database.phpです。データベースには直接メモリーに保存するドライバーは用意されていません。SQLiteでメモリにデータベースを設定できますので、それを使用します。),);application/testsの構成testsのディレクトリー構成です。application下の構成をコピーし、テスト対象ファイルと同じ相対パスにテストクラスを設置しています。テストスタブはTestStubsディレクトリー下にテスト対象を表すディレクトリーを作成し、その対象で使用するスタブなどをディレクトリー内に設置します。+modelsテストスタブはIoCコンテナにより置き換えます。IoCコンテナはLaravelのクラスです。Laravelのオートローダーで指定できるようにしなくてはなりません。プロジェクトの本体であるProjectHフォルダーをPSR-0規約でのオートロード先として指定しています。その配列に、テストスタブのディクトリーを付け加えましょう。start.phpでしたね。path('app').'tests/TestStubs',));テストスタブのディレクトリーを付け加えた所で、アプリケーションの実行結果は変わりません。PSR-0規約の場合、ベンダー名が一致するかどうかを最初に確認します。本体のProjectHはTestStubsより前に定義されているため、先にチェックされます。本体の実行結果には影響ありません。(もし、逆だとしても、配列一回の参照の違いでしかありません。ファイルの存在をチェックするためのファイルアクセスが余計に発生することもありません。)さて、これでテストケースを書く準備ができました。次の記事から、単体テストを書いていきましょう。