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クラスのインスタンスと比較しています。もちろん、一致していればテストをパスです。
一機能しかありませんので、テストはこれで終了です。とても単純なテストケースでした。