Laravel3、例外のテスト
この記事は、Laravel3でのテストについてのシリーズです。
- その1:単体テストの準備
- その2:例外のテスト
- その3:Eloquentモデルのテスト
- その4:バリデータークラスのテスト
- その5:リポジトリークラスのテスト
- その6:コントローラークラスのテスト
- その7:結合テスト
テストの対象は、以下のシリーズで作成した、りんごテーブルに対する簡単なCRUD操作プログラムに対するものです。
- 参照:Laravel3で活かす例外
- 参照:クラスのディレクトリー構造をひと工夫
- 参照:例外と小さなクラス達
- 参照:小さなクラスで読み込み削除
- 参照:小さなクラスで更新
例外クラスの単体テスト
一番簡単な例外クラスの単体テストを最初に行います。
テスト対象はProjectH\Exceptions\ExecutionErrorExceptions\ValidationFaildException一つです。
このバリデーションを通過しなかったことを示す例外以外の例外は、全部Exceptionクラスをただ拡張しているだけです。このValidationFaildExceptionはコンストラクターでLaravel\Validatorクラスを渡すようになっています。バリデーションエラー時に表示するエラーメッセージをValidatorクラスは持っているため、それを通知するためプロパティとして保持します。
<?php namespace ProjectH\Exceptions\ExecutionErrorExceptions; class ValidationFaildException extends ExecutionErrorException { public $validator; public function __construct( $validator, $message = null, $code = 0, Exception $previous = null ) { parent::__construct( $message, $code, $previous ); $this->validator = $validator; } }
このクラスのコンストラクターの機能は、渡されたValidatorクラスのインスタンスをプロパティとして保持することです。
では、これに対する単体テストを記述しましょう。
<?php use ProjectH\Exceptions\ExecutionErrorExceptions\ValidationFaildException; class ValidationFaildExceptionTest extends \PHPUnit_Framework_TestCase { private $val_original = 100; private $val_exception = 200; public function testValidationFaildException() { $inputs = array( 'input1' => '100', ); $rules = array( 'input1' => 'required|max:50', ); try { $this->val_original = Validator::make($inputs, $rules); throw new ValidationFaildException($this->val_original); } catch ( ValidationFaildException $e ) { $this->val_exception = $e->validator; } $this->assertEquals($this->val_exception, $this->val_original); } }
Validatorクラスのインスタンスをmake()メソッドで生成します。
それをValidationFaildExceptionのコンストラクターに渡し、発生させた例外をキャッチ、キャッチした例外クラスのインスタンスのプロパティ(Validatorクラスのインスタンス)を例外に渡したValidatorクラスのインスタンスと比較しています。もちろん、一致していればテストをパスです。
一機能しかありませんので、テストはこれで終了です。とても単純なテストケースでした。