Laravel3、例外のテスト

タグ: Laravel3   テスト志向  

この記事は、Laravel3でのテストについてのシリーズです。

テストの対象は、以下のシリーズで作成した、りんごテーブルに対する簡単なCRUD操作プログラムに対するものです。

例外クラスの単体テスト

一番簡単な例外クラスの単体テストを最初に行います。

テスト対象はProjectH\Exceptions\ExecutionErrorExceptions\ValidationFaildException一つです。

このバリデーションを通過しなかったことを示す例外以外の例外は、全部Exceptionクラスをただ拡張しているだけです。このValidationFaildExceptionはコンストラクターでLaravel\Validatorクラスを渡すようになっています。バリデーションエラー時に表示するエラーメッセージをValidatorクラスは持っているため、それを通知するためプロパティとして保持します。

  1. <?php
  2.  
  3. namespace ProjectH\Exceptions\ExecutionErrorExceptions;
  4.  
  5. class ValidationFaildException extends ExecutionErrorException
  6. {
  7. public $validator;
  8.  
  9. public function __construct( $validator, $message = null, $code = 0, Exception $previous = null )
  10. {
  11. parent::__construct( $message, $code, $previous );
  12.  
  13. $this->validator = $validator;
  14. }
  15.  
  16. }

このクラスのコンストラクターの機能は、渡されたValidatorクラスのインスタンスをプロパティとして保持することです。

では、これに対する単体テストを記述しましょう。

  1. <?php
  2.  
  3. use ProjectH\Exceptions\ExecutionErrorExceptions\ValidationFaildException;
  4.  
  5. class ValidationFaildExceptionTest extends \PHPUnit_Framework_TestCase
  6. {
  7. private $val_original = 100;
  8. private $val_exception = 200;
  9.  
  10. public function testValidationFaildException()
  11. {
  12. $inputs = array(
  13. 'input1' => '100',
  14. );
  15.  
  16. $rules = array(
  17. 'input1' => 'required|max:50',
  18. );
  19.  
  20. try
  21. {
  22. $this->val_original = Validator::make($inputs, $rules);
  23. throw new ValidationFaildException($this->val_original);
  24. }
  25. catch ( ValidationFaildException $e )
  26. {
  27. $this->val_exception = $e->validator;
  28. }
  29.  
  30. $this->assertEquals($this->val_exception, $this->val_original);
  31. }
  32.  
  33. }

Validatorクラスのインスタンスをmake()メソッドで生成します。

それをValidationFaildExceptionのコンストラクターに渡し、発生させた例外をキャッチ、キャッチした例外クラスのインスタンスのプロパティ(Validatorクラスのインスタンス)を例外に渡したValidatorクラスのインスタンスと比較しています。もちろん、一致していればテストをパスです。

一機能しかありませんので、テストはこれで終了です。とても単純なテストケースでした。