Laravel3、例外のテスト

タグ: Laravel3   テスト志向  

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

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

例外クラスの単体テスト

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

テスト対象は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クラスのインスタンスと比較しています。もちろん、一致していればテストをパスです。

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