CIUnit: Unit testing for CodeIgniter(3)

CodeIgnigter

CIUnit.phpの改変

コントローラを読み込む際、ファイル名が小文字の場合に読み込まれないという問題が発生をしました。
そのため、CIUnit.phpを改変しました。
 
 
 

tests/CIUnit.php
124行目あたり

 
include_once(APPPATH . 'controllers/' . $controller . EXT);
 

↓修正
ファイルの存在確認を行い、なければ小文字にして読み込むよう、変更

if(is_file(APPPATH . 'controllers/' . $controller . EXT)){
    include_once(APPPATH . 'controllers/' . $controller . EXT);
}else{
    $controller2 = strtolower($controller);
    include_once(APPPATH . 'controllers/' . $controller2 . EXT);
}
 

これでテストが通るようになりました。

テストのコードカバー率を確認する

次に、phpUnitを使うなら、
http://gihyo.jp/dev/feature/01/php-test/0003?page=5
こんなレポートはぜひ生成させたい!
ということで、生成させようとしてみました

$ phpunit --report ./report AllTests.php 
PHPUnit 3.3.16 by Sebastian Bergmann.

........................セグメンテーション違反です

phpunit AllTests.php
は、正常にテストが完了します。
–reportの場合のみ、 「セグメンテーション違反です」の文字が表示されて、処理が途中で止まります。
レポートも生成されません。
これは、

$this->load->model("モデル名");
// $this->CI->load->model("モデル名");も同様

の処理が入っているものすべてで発生をしていて、Controllreのテストでもモデルをロードしている場合は同じようにエラーが発生しました。モデルを読み込まないようにするとレポートが生成されます。
phpunitテスト自体は、モデルの読み込みの有無にかかわらず正常にテストの結果が返ってきます。

で、結局PHPUnitのコードに手を入れました(^-^;)
私の環境では、/usr/share/pear/PHPUnit/ にインストールされています。
手探りで、処理を追いつつ、結局ファイルに手を入れました。
/usr/share/pear/PHPUnit/Framework/TestResult.php
601行目あたり

xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);
 

↓修正
とっても無茶な感じに修正(汗)

//xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);
xdebug_start_code_coverage(XDEBUG_CC_UNUSED | 1);

print文を仕込んだところ、
XDEBUG_CC_UNUSEDは1
XDEBUG_CC_DEAD_CODEは2が格納されていました。

検索していて、このサイトを発見。
http://mp.i-revo.jp/user.php/kcvcrlkq/entry/249.html
0か1なら動くかな・・・・・ドキドキ
で、1にしてみたら、正常にテストが実行され、reportが生成されました

XDEBUG_CC_DEAD_CODEの意味とかちゃんと調べてからとか・・・・
動くには動いてますが、方法は間違ってる可能性が高いです。(><)

無事(?)レポートが生成されました。
system以下のコードのカバー率や、テストされている行が一目で見えるのは、
嬉しいです♪

生成されたレポートですが、日本語が文字化けをします。
そこでテンプレートを編集しました。
shimookaさんありがとうございますm(_ _)m

/usr/share/pear/PHPUnit/Util/Report/Template/file.html.dist

<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

コードの日本語のコメント文の文字化けも直りました。

環境
Fedora 8
php-5.2.6-2.fc8
PHPUnit 3.3.16

PHP 5.2.6 (cli) (built: May 8 2008 08:54:23)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with Xdebug v2.0.4, Copyright (c) 2002-2008, by Derick Rethans

関連
CIUnit: Unit testing for CodeIgniter
CIUnit: Unit testing for CodeIgniter(2)
CIUnit: Unit testing for CodeIgniter(2)のつづき

参考にさせていただいたサイト
PHPUnit3で始めるユニットテスト
http://gihyo.jp/dev/feature/01/php-test/0001

fooStack for CodeIgniter
http://www.foostack.com/foostack/

PHPUnit errorの記事
http://jaciss.wordpress.com/2008/02/18/phpunit-error-testcasename-or-testcase/