概要
以下のページでセットアップした環境を前提としている。
http://qiita.com/uchiko/items/a5c2e45264963acc0e4a
oil経由でPHPUnitを実行できるように設定をする。
PHPUnitのインストール
composer.jsonを編集して、PHPUnitをインストールするように設定する。
また、Stagehand TestRunnerというのが便利らしいので、それもインストールする。
...
"require": {
...
"phpunit/phpunit": "4.1.*",
"piece/stagehand-testrunner": ">=3.5.0"
},
...
以下のコマンドを実行するとインストールが始まる。
$ php composer.phar update
oilの設定変更
oilのデフォルト設定だと、phpunitコマンドへのパスが通っていない。
以下の手順で、oilの設定を変更する。
oil.phpをappディレクトリにコピーする。
$ cp fuel/packages/oil/config/oil.php fuel/app/config/
oil.phpに項目を以下のように設定する。
'autoload_path' => '' ,
'binary_path' => DOCROOT.'fuel/vendor/bin/phpunit' ,
oilコマンド経由でテストが実行できるようになる。
テストを実行してみる
以下のコマンドで、FuelPHPのCoreのテストを走らせることができる。
$ php oil test --group=Core
いくつかテストが失敗するのだがいいのだろうか。
テストを書く
ここに記載しているコードは、
以下の書籍に載っているものを参考にさせていただきました。
http://tatsu-zine.com/books/fuelphp1st
以下のようにフィルタクラスを作成する。
<?php
class MyInputFilters
{
// 文字エンコーディングの検証フィルタ
public static function check_encoding($value)
{
// 配列の場合は再帰的に処理
if (is_array($value))
{
array_map(['MyInputFilters', 'check_encoding'], $value);
return $value;
}
// 文字エンコーディングを検証
if (mb_check_encoding($value, Fuel::$encoding))
{
return $value;
}
else
{
// エラーの場合はログに記録
static::log_error('Invalid character encoding', $value);
// エラーを表示してシュル用
throw new HttpInvalidInputException('Invalid input data');
}
}
// エラーをログに記録
public static function log_error($msg, $value)
{
Log::error(
$msg . ': ' . Input::uri() . ' ' . urlencode($value) . ' ' .
Input::ip() . ' "' . Input::user_agent() . '"'
);
}
}
以下のようにテストを書く。
<?php
/**
* MyInputFilters class Tests
*
* @group App
*/
class Test_MyInputFilters extends TestCase
{
public function test_check_encoding_invalid_sjis()
{
$this->setExpectedException(
'HttpInvalidInputException', 'Invalid input data'
);
$input = mb_convert_encoding('SJISの文字列です。', 'SJIS');
$test = MyInputFilters::check_encoding($input);
}
public function test_check_encoding_valid()
{
$input = '正常なUTF-8の文字列です。';
$test = MyInputFilters::check_encoding($input);
$expected = $input;
$this->assertEquals($expected, $test);
}
}
以下のようにテストを実行する。
$ php oil test --group=App
Tests Running...This may take a few moments.
PHPUnit 4.1.1-2-ge93a391 by Sebastian Bergmann.
Configuration read from /home/uchiko/project/fuelphp-1.7/fuel/core/phpunit.xml
...............
Time: 1.32 seconds, Memory: 16.25Mb
OK (15 tests, 18 assertions)
できた。
参考
3分でできる FuelPHP 1.6 テスト環境
http://d.hatena.ne.jp/Kenji_s/20130214/fuelphp_test_env