今日はRedmine勉強会

今日はRedmine勉強会が開催されます。
私は普段、Subversion+Tracという環境で開発だったり、コーディングだったりデザインだったりをしてますが、最近はgit+Redmineなんて環境で環境を作っていらっしゃる方の話をよく聞きます。
とても楽しみ♪

redmineのことを知りたくて買った本です。これのsubversion本が非常にすばらしかったことから、trac本も購入済み。

サーバにredmineが動く環境を作ってみました。
tracだと、gitに対応していないため、今後は切り替えていくのもありかなぁと思っています。
(もっとtracをがっつり使うぞ!という気持ちもありますが・・・(^-^;))

資料
★git勉強会・動画 2008.10.7

[メモ]今日のMyNETS2でCIUnit

MyNETS2

modules以下のmodel,library,helperのテストが、CIUnitでできるようになりました。
modules以下のControllerとviewはまだphpunitが実行できる状態にまで辿りつけていません。

adminモジュールのModel_adminで、少しはまりました。

$this->_user_id = $this->CI->session->userdata('user_id');

の処理を通過させるために、setUp()の中で、次のコードの記入が必要でした。

adminモジュールのModel_adminの31行目
$this->CI->session->userdata(‘user_id’);で、user_idを渡している箇所のために、記載。
ひょっとしたらsessionではなく違うカタチでuser_idを渡せれば、もっと良いのかも。

$this->CI->load->file(APPPATH.'libraries/session/MYNETS_Session.php');
$this->CI->session = new MYNETS_Session;

実行をすると次のように表示されます。
Warningは出ますが、テストは実行できます。

$ phpunit testSomeModel.php 

PHPUnit 3.3.16 by Sebastian Bergmann.

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  Cannot modify header information - headers already sent by (output started at /usr/share/pear/PHPUnit/Util/Printer.php:168)</p>
<p>Filename: libraries/Session.php</p>
<p>Line Number: 663</p>

</div>.

Time: 0 seconds

OK (1 test, 0 assertions)

追記:2009.06.12 3:19
modules以下のcontrollerはとりあえず諦めようかなという気分です。
APPPATH.controller/以下のcontrotterもOUTPUTがあるかどうかのテストだけみたいだし・・・(言い訳)

modulesのmodelのテストで、

$this->_user_id = $this->CI->session->userdata('user_id');

が使われている場合の処理について、前回のやり方だと、AllTests.phpの実行時にエラーが発生するので、次のように修正。

if(!isset($this->CI->session)){
    $this->CI->load->file(APPPATH.'libraries/session/MYNETS_Session.php');
    $this->CI->session = new MYNETS_Session;
}
$this->CI->session->userdata('1');

なんだかもう少しな気がしてきたよ。

phpカンファレンス2009

phpカンファレンス2009

公式サイトがオープンしました。
http://phpcon.php.gr.jp/2009/

記念すべき第10回にふさわしく,
* Facebook 開発者 Brian Shire 氏
* symfony 開発者 Fabien Potencier 氏
* Taiwan PHP User Group の Finjon Kiang 氏

など豪華スピーカーを迎えて開催いたします!
PHP カンファレンス 2009 | 2009年9月4日・5日開催 日本PHPユーザ会主催

すっかりサボってしまっていた、smart.fmを再開しようと思います(><)

[メモ]構造を調べるツール

20090607.jpg

MyNETS2(というよりもCodeIgniter本体なんですが・・・)のコードを読み始めました。
全体像を想像しつつ、ノートに手書きでメモを書いてるのですが、どこまで読んだのかとか、メモを取るのに軸が欲しくなりました。
・・・・で使ってみたのが解析ソフトです。

GraphvizとDoxygenというソフトをWindows環境にインストールしました。
参考にさせていただいたサイトは私がインストールしたバージョンよりも少し古い情報のようですが、とても参考になりました。

参考にさせていただいたサイト
http://skazami.web.infoseek.co.jp/tools/Graphviz_Doxygen.htm

ためしに、破壊中(?)のMyNETS2を解析してみた結果のキャプチャです。(わりと大きい画像ファイルです)
CIUnitが入ったままなので、CIUnitも一緒に解析されています。
Class階層図がテキストリンクと画像が生成されたのがとても嬉しくて、キャプチャをとってみました。
生成される階層図の画像は、フォントサイズがあまりに小さかったので、設定画面で大きくしています。

[メモ]CodeIgniterの情報を検索してみる

CodeIgnigter

まだまだ勉強不足の自分自身のために、検索結果をメモ〆(。。)
まだまだ使い切れてないなぁを自覚中。

MyNETS2のモジュールになることによってファイルが切り分けられて見通しがとても良くなる仕組みはとても素敵だけれども、CodeIgniter本体のバージョンアップに対しても自力で対応できるようにまでなりたい。
がんばらねばデス。

DBの設定等の盲点
http://blog.promob.jp/fri/2009/04/codeigniter-2.html

codeigniterとxajaxの話題
http://hain.jp/index.php/tech-j/2006/07/24/p29
xajaxというのは使ったことないのだけども、
以前にさわったcakephp1.1よりもCodeIgniter1.7.0のほうがajaxやjavascriptを組み込みやすかったように思う。
ただ、cakephpも半年ぐらいしか触ったことが無いので、言い切ってしまってよいかどうかはわからない・・・(汗

twitter @CodeIgniter
http://twitter.com/CodeIgniter
いまさらながらフォローをしました♪

CIUnitで素の状態のCodeIgniterに対してはテストが行えるようになりました。
ただ、MyNETS2に対してのソレは、MyNETS2の特徴とも言える携帯対応の部分をコメントアウトしたと、内部を壊しつつの対応で、やっとのことmodules以外のテストが出来るようになっただけです。
基本的なことがわかっていないので、modules以下をどうテストを書いてよいかがわからない。
CIUnitは本当に良く出来ていて、Controllreのテスト、modulesのテストととても書きやすくできています。
modulesでも同等にわかりやすく書けるべきで、それがどうやれば実装できるのか・・・・・

現状のMyNETS2でCIUnit

MyNETS2

今現在の状況で言えば、
modules以下の本当にテストをしたい箇所がテストが出来ませんが、
動くところまでもっていくことができました。

ただ、MyNETS2のコードを書き換えての対応なので、
あまりよくない対応です。

Loader.phpのモバイルかどうかを判定して、
モバイル用のviewファイルがあれば、
そっちをとりにいく処理を
コメントアウトして動かしてます・・・・orz

あきらめずにコードを追いたいと思います。

追記:2009.06.07
CodeIgniterの話題とMyNETS2(アプリケーションプラットフォーム)との話題の差がわかりにくいので画像を作成してみました。MyNETS2の話題に関してはしばらくこれを使おうかなと思います。

さらに追記:2009.06.07 17:36
コメントアウトした部分は、携帯からのアクセスの場合、携帯用のviewフォルダにファイルがあればそっちを読むべし的な処理部分でした。1つのコントローラが、件数の表示を切り替えるにしても同じコントローラを使う場合使わない場合もありそうなので、コメントアウトのままでもいいかもしれないと思い始めています。・・・・でもやっぱりあったほうがいいのかなぁ・・・・(汗)

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/

CIUnit: Unit testing for CodeIgniter(2)の続き

CodeIgnigter


CIUnit: Unit testing for CodeIgniter(2)
の続きです。
(3)ではありませn・・・・・(汗)
phpunitの再インストールで動き出したと思われたCIUnitですが、
正常な動作ではありませんでした。

$ cd controllers/

$ phpunit testWelcome.php 
PHPUnit 3.3.16 by Sebastian Bergmann.

..

Time: 0 seconds

OK (2 tests, 2 assertions)

$ phpunit ControllersAllTests.php 
PHPUnit 3.3.16 by Sebastian Bergmann.

..

Time: 0 seconds

OK (2 tests, 2 assertions)

ここまでは正常です。

controllreのテストまで正常に動きましたが、
全テストではエラーが発生します

$ cd ../
phpunit AllTests.php 
PHPUnit 3.3.16 by Sebastian Bergmann.

.............<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  CIUnit::include_once(/var/www/html/works/system/application/controllers/Welcome.php): failed to open stream: No such file or directory</p>
<p>Filename: tests/CIUnit.php</p>
<p>Line Number: 124</p>

</div><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  CIUnit::include_once(): Failed opening '/var/www/html/works/system/application/controllers/Welcome.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php')</p>
<p>Filename: tests/CIUnit.php</p>
<p>Line Number: 124</p>

</div>PHP Fatal error:  Class 'Welcome' not found in /var/www/html/works/system/application/tests/CIUnit.php on line 130
PHP Stack trace:
PHP   1. {main}() /usr/bin/phpunit:0
PHP   2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:52
PHP   3. PHPUnit_TextUI_TestRunner->doRun() /usr/share/pear/PHPUnit/TextUI/Command.php:128
PHP   4. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/TextUI/TestRunner.php:324
PHP   5. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621
PHP   6. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621
PHP   7. PHPUnit_Framework_TestSuite->runTest() /usr/share/pear/PHPUnit/Framework/TestSuite.php:658
PHP   8. PHPUnit_Framework_TestCase->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:677
PHP   9. PHPUnit_Framework_TestResult->run() /usr/share/pear/PHPUnit/Framework/TestCase.php:375
PHP  10. PHPUnit_Framework_TestCase->runBare() /usr/share/pear/PHPUnit/Framework/TestResult.php:607
PHP  11. PHPUnit_Framework_TestCase->runTest() /usr/share/pear/PHPUnit/Framework/TestCase.php:404
PHP  12. ReflectionMethod->invoke() /usr/share/pear/PHPUnit/Framework/TestCase.php:489
PHP  13. testCIUnit->testDifferentControllers() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:0
PHP  14. set_controller() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:147
PHP  15. CIUnit::set_controller() /var/www/html/works/system/application/tests/CIUnit.php:195

Fatal error: Class 'Welcome' not found in /var/www/html/works/system/application/tests/CIUnit.php on line 130

Call Stack:
    0.0005	83784   1. {main}() /usr/bin/phpunit:0
    0.1485    5663072   2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:52
    0.3327    9503688   3. PHPUnit_TextUI_TestRunner->doRun() /usr/share/pear/PHPUnit/TextUI/Command.php:128
    0.3333    9506304   4. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/TextUI/TestRunner.php:324
    0.3342    9506512   5. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621
    0.4183    9597480   6. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621
    0.4809   10191464   7. PHPUnit_Framework_TestSuite->runTest() /usr/share/pear/PHPUnit/Framework/TestSuite.php:658
    0.4809   10191464   8. PHPUnit_Framework_TestCase->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:677
    0.4809   10191464   9. PHPUnit_Framework_TestResult->run() /usr/share/pear/PHPUnit/Framework/TestCase.php:375
    0.4811   10191464  10. PHPUnit_Framework_TestCase->runBare() /usr/share/pear/PHPUnit/Framework/TestResult.php:607
    0.4825   10201528  11. PHPUnit_Framework_TestCase->runTest() /usr/share/pear/PHPUnit/Framework/TestCase.php:404
    0.4826   10201528  12. ReflectionMethod->invoke() /usr/share/pear/PHPUnit/Framework/TestCase.php:489
    0.4826   10201528  13. testCIUnit->testDifferentControllers() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:0
    0.4827   10201528  14. set_controller() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:147
    0.4827   10201528  15. CIUnit::set_controller() /var/www/html/works/system/application/tests/CIUnit.php:195

$ cd controllers/
$phpunit testWelcome.php 
PHPUnit 3.3.16 by Sebastian Bergmann.

..

Time: 0 seconds

OK (2 tests, 2 assertions)
[root@localhost controllers]# phpunit ControllersAllTests.php 
PHPUnit 3.3.16 by Sebastian Bergmann.

..

Time: 0 seconds

OK (2 tests, 2 assertions)
$  cd ../
$ phpunit AllTests.php 
PHPUnit 3.3.16 by Sebastian Bergmann.

.............<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  CIUnit::include_once(/var/www/html/works/system/application/controllers/Welcome.php): failed to open stream: No such file or directory</p>
<p>Filename: tests/CIUnit.php</p>
<p>Line Number: 124</p>

</div><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  CIUnit::include_once(): Failed opening '/var/www/html/works/system/application/controllers/Welcome.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php')</p>
<p>Filename: tests/CIUnit.php</p>
<p>Line Number: 124</p>

</div>PHP Fatal error:  Class 'Welcome' not found in /var/www/html/works/system/application/tests/CIUnit.php on line 130
PHP Stack trace:
PHP   1. {main}() /usr/bin/phpunit:0
PHP   2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:52
PHP   3. PHPUnit_TextUI_TestRunner->doRun() /usr/share/pear/PHPUnit/TextUI/Command.php:128
PHP   4. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/TextUI/TestRunner.php:324
PHP   5. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621
PHP   6. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621
PHP   7. PHPUnit_Framework_TestSuite->runTest() /usr/share/pear/PHPUnit/Framework/TestSuite.php:658
PHP   8. PHPUnit_Framework_TestCase->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:677
PHP   9. PHPUnit_Framework_TestResult->run() /usr/share/pear/PHPUnit/Framework/TestCase.php:375
PHP  10. PHPUnit_Framework_TestCase->runBare() /usr/share/pear/PHPUnit/Framework/TestResult.php:607
PHP  11. PHPUnit_Framework_TestCase->runTest() /usr/share/pear/PHPUnit/Framework/TestCase.php:404
PHP  12. ReflectionMethod->invoke() /usr/share/pear/PHPUnit/Framework/TestCase.php:489
PHP  13. testCIUnit->testDifferentControllers() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:0
PHP  14. set_controller() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:147
PHP  15. CIUnit::set_controller() /var/www/html/works/system/application/tests/CIUnit.php:195

Fatal error: Class 'Welcome' not found in /var/www/html/works/system/application/tests/CIUnit.php on line 130

Call Stack:
    0.0006	83784   1. {main}() /usr/bin/phpunit:0
    0.1494    5663072   2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:52
    0.3345    9503688   3. PHPUnit_TextUI_TestRunner->doRun() /usr/share/pear/PHPUnit/TextUI/Command.php:128
    0.3351    9506304   4. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/TextUI/TestRunner.php:324
    0.3360    9506512   5. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621
    0.4190    9597480   6. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621
    0.4814   10191464   7. PHPUnit_Framework_TestSuite->runTest() /usr/share/pear/PHPUnit/Framework/TestSuite.php:658
    0.4814   10191464   8. PHPUnit_Framework_TestCase->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:677
    0.4814   10191464   9. PHPUnit_Framework_TestResult->run() /usr/share/pear/PHPUnit/Framework/TestCase.php:375
    0.4816   10191464  10. PHPUnit_Framework_TestCase->runBare() /usr/share/pear/PHPUnit/Framework/TestResult.php:607
    0.4831   10201528  11. PHPUnit_Framework_TestCase->runTest() /usr/share/pear/PHPUnit/Framework/TestCase.php:404
    0.4831   10201528  12. ReflectionMethod->invoke() /usr/share/pear/PHPUnit/Framework/TestCase.php:489
    0.4831   10201528  13. testCIUnit->testDifferentControllers() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:0
    0.4832   10201528  14. set_controller() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:147
    0.4832   10201528  15. CIUnit::set_controller() /var/www/html/works/system/application/tests/CIUnit.php:195

なぜかAllTTestの場合、controllerのwelcomeを呼び出しているところが、Welcomeを呼び出そうとして失敗をしています。

CIUnit.phpの124行目

include_once(APPPATH . ‘controllers/’ . $controller . EXT);
の部分の$controller がwelcomeからWelcomeに変化しています。それによってファイルが読み込めずのエラーのようです。

無理やりな感じになおしてみました。

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);
		}

やっとやっと、テストができるところまで到着(TAT)

ここまでの感想
phpunitの再インストールの記事を自力で探せませんでした。
基礎力がおそろしく足りないことを自覚しました。
「何がわからないか?」がわからないと解答が目の前にあってもそれが解答と理解できないのだなぁ・・・・

CIUnitへの挑戦はこんな流れでがんばってみる予定です

  • CIUnitを設置してみる
  • CodeIgniterでテストができるようにする ←今ココ
  • 実際にテストを書いてみる
  • テストの効果を実感してみる
  • CIUnitのコードを読んでみる
  • MyNETS2(CodeIgniter 1.7.0改)で使えないか模索してみる

    CIUnit: Unit testing for CodeIgniter(2)

    CodeIgnigter

    CIUnit
    CIUnit: Unit testing for CodeIgniter

    サイトによると・・・
    CIUnit は、Codeigniterで作ったアプリケーションとphpUnitを繋ぐためのブリッジの役割をするもののようです。
    「tested with 1.6.X, 1.7.0 and 1.7.1」ということなので、1.7.0 1.7.1でもテストが出来ます。

    [Download the current fooStack v0.15 here!]というテキストリンクからダウンロードしました。
    開発バージョンと旧式のバージョンはbitbucket.org / ciunitというところを見ると良いらしいです。
    bitbucket(びっとばけつ)というものをはじめて知りました。
    フォルダ名等、通常の構造のままであることが、使用の前提のようです。
    英語苦手なので、自分用に翻訳してみました(^-^;)

    Install it as follows:インストール方法(訳)

    1.fooStackディレクトリ をコピーして、
    /system/application/librariesの直下に設置します。

    2. テストをするCodeIgniterアプリは、標準のレイアウトを使用していることを想定しています。

    3. testsディレクトリをコピーして
    /system/applicationの直下に設置します

    4. system/codeigniter/CodeIgniter.phpを
    ダウンロードした同名のファイルと入れ替えます。

    5. rsystem/application/config/database.phpを改変します。

    $active_group = "default";

    の部分を

    $env_used = 'default'; //where default would be the name of your development setting
          if(defined('CIUnit_Version')){
            $env_used .= '_test';
          }
          $active_group = $env_used;

    ・・・と置き換えちゃいます。

    6. ‘テストデータベースとして機能する新しいデータベース設定を作成します。
    (テストを実行すると、それはいつもクリアになります)
    データベースの名前は開発環境のようですが、‘_test’とつけてください。
    【注意】CIUnit fixturesは、データベース名の後ろに、’_test’とつけて、それを使うことで
    テストの実行によるDBデータの損失を防ぐようになっています。

    訳してみたけど微妙な文書になってる気がする・・・

    追記:2009.05.31
    テスト用のデータベースの設定が必要です。
    私は開発中のDBのコピーをDB名_testで作成して、テスト用のDBにしました

    $db['default_test']['hostname'] = "localhost";
    $db['default_test']['username'] = "DBの接続ユーザ";
    $db['default_test']['password'] = "パスワード";
    $db['default_test']['database'] = "テスト用データベース";
    $db['default_test']['dbdriver'] = "mysql";
    $db['default_test']['dbprefix'] = "";
    $db['default_test']['pconnect'] = TRUE;
    $db['default_test']['db_debug'] = TRUE;
    $db['default_test']['cache_on'] = FALSE;
    $db['default_test']['cachedir'] = "";
    $db['default_test']['char_set'] = "utf8";
    $db['default_test']['dbcollat'] = "utf8_general_ci";

    Run tests テストを走らせてみる。
    1.すべてのテストディレクトリからテスト

    $ phpunit AllTests.php

    実行した結果

    phpunit AllTests.php
    PHPUnit 3.1.8 by Sebastian Bergmann.
    
    FFFFFFF
    
    Time: 0 seconds
    
    There were 7 failures:
    
    1) Warning(PHPUnit_Framework_Warning)
    No tests found in class "CiunitAllTests".
    
    2) Warning(PHPUnit_Framework_Warning)
    No tests found in class "SystemAllTests".
    
    3) Warning(PHPUnit_Framework_Warning)
    No tests found in class "LibsAllTests".
    
    4) Warning(PHPUnit_Framework_Warning)
    No tests found in class "ModelsAllTests".
    
    5) Warning(PHPUnit_Framework_Warning)
    No tests found in class "ViewsAllTests".
    
    6) Warning(PHPUnit_Framework_Warning)
    No tests found in class "ControllersAllTests".
    
    7) Warning(PHPUnit_Framework_Warning)
    No tests found in class "HelpersAllTests".
    
    FAILURES!
    Tests: 7, Failures: 7.

    2.サブグループだけのテスト

    $ cd models
    $ phpunit ModelAllTests.php

    実行した結果

    [root@localhost models]# phpunit ModelsAllTests.php 
    PHPUnit 3.1.8 by Sebastian Bergmann.
    
    F
    
    Time: 0 seconds
    
    There was 1 failure:
    
    1) Warning(PHPUnit_Framework_Warning)
    Constructor of class "testSomeModel" is not TestCase($name) or TestCase().
    
    FAILURES!
    Tests: 1, Failures: 1.

    3.特定の1つだけのテストの場合は
    テストを書いたディレクトリに移動して、テストを書いたファイルそのものを実行してください

    Generating database fixtures

    ちと意味がわからなかった・・・・テスト用DBのかわりにyamlで代用が出来るよ的な内容かなとは思う・・・・

    テスト用のテーブルを、作ることが出来ます。
    (テスト用のデータベースそのものを用意するべきですが・・・)
    テスト用ファイルは、tests/fixtures/以下で利用可能です。
    ディレクトリに対して書き込み可能な状態にしてください。
    テスト用ファイルは、yamlのフォーマットで記載します。
    yamlにテスト用のデータを記載してください。

    $this->dbfixt('items', 'comments', 'users');

    テストから、機能をセットアップしてください。
    そうすると、テストデータベースに読み込まれるので、変数をテストで利用可能になります。

    $this->items_fixt, 
    $this->comments_fixt, 
    $this->users_fixt.

    テストデータベースのコメントテーブルのデータの2番目の行も利用可能です。

    $this->comments_fixt['second'];

    CIUnit tests itself CIUnit自体のテスト
    テストを全く書かずにテストを実行してください。

    $ phpunit CIUnitAllTests.php

    ・・・を実行すると、2つか3つぐらいのテストの結果が返ってきます。
    これは、CIUnitが正しくインストールされていることを確認するためのテストです。

    そして実際にテストを書いてみる
    ・・・が、私はまだphpUnitの使い方もよくわかっていないorz
    設置したtestsフォルダの中に、サンプルのコードがありました。

    system/application/tests/controllers/testWelcome.php

    <?php
    
    include_once dirname(__FILE__).'/../CIUnit.php';
    
    class testWelcome extends CIUnit_TestCase{
    
        function setUp(){
    	$this->CI = set_controller('welcome');
        }
    
        public function testWelcomeController(){
          $this->CI->index();
          $out = output();
          $this->assertSame(0, preg_match('/(error|notice)/i', $out));
        }
    
    }

    tests/models,tests/libsの中にも同じような感じでサンプルのコードがありました。

    追記:2009.05.30
    phpUnitのチュートリアルをやってみて、CIUnitのテストを書いてみたけどうまくいかない。
    サンプルに追記をしてみても、改変をしてみても

    1) Warning(PHPUnit_Framework_Warning)
    Constructor of class "testWelcome" is not TestCase($name) or TestCase().

    と、テストケースが無いよと言われる。
    設置した直後の状態と、サンプル(tests/controllers/testWelcome.php)に追記したあとも、
    テスト結果が変わらない(T-T)

    追記:2009.05.30 04:01
    lllnorikolllさんが教えてくださったサイト・・・・
    http://jaciss.wordpress.com/2008/02/18/phpunit-error-testcasename-or-testcase/
    phpUnitをインストールしなおせということのようです・・・・orz

    追記:2009.05.30
    pearをアンインストールしたあと、したりインストールしたりを繰り返したら動くようになりました(><)
    ありがとうlllnorikolllさん!!!

    アンインストールした後、

    # ll /usr/share/pear

    で確認してみたら、なぜかPHPUnit/があったのでフォルダごと削除してから、再度phpunitをインストールしてみたら、テストが通るようになりました。
    なぜだかはわからないけれども、
    とにかくテストを書く手前までたどり着けました(><)ノ

    SubversionとWebdavとhocks

    subversion
    SubversionとWebdavとhocksでwebdavにコミットした内容を、コミットした直後に、動作確認をプロジェクトメンバー皆で確認できる環境が欲しいなと思い、環境を作ってみました。

    Webdavの利用
    webdavからのオートコミットであるという定型文がコミットログとして保存されます。
    大きなメリットとしては、dreamweaverではFTPを使うのと全く同じ操作感でファイルをwebdavへUPすることができます。今まで全くwebdavを使ったことが無い人でもFTPでアップしながらの製作作業を行った経験のある方であれば、全く作業の内容を変えることなく、webdavを利用することが出来ます。
    新たに覚えることは、dreamweaverでのwebdavサーバの設定方法だけです。
    実際の製作内容で、新たに操作方法を覚えたり、普段と違う作業を行うといったことは一切ありません。

    webdavはSVNの連動ではなく、webdav単体で利用する場合、アップされたファイルは指定のURLに保存されます。
    apacheの拡張機能で、ファイルの操作をapacheが行うので、当然アップされたファイルはすべてapacheユーザのものになるため、パーミッションの問題が発生することはまずありません。
    webdavのアクセス権限を制限するために使用する認証情報(ID,PASS)は、ファイルをアップする時にも使え、また表示確認の際、ブラウザ越しにurlへアクセスする場合にベーシック認証として動作するためID,PASSの管理が容易です。

    WebdavとSubversionとの連動
    subversionとwebdavを連動するように設定すると、webdavへのファイルアップ(削除も…)=コミットとなります。
    自動的にsubversionへコミットしたことになります。
    subversionクライアントソフトを使う場合との差は、コミットログの登録ができないことです。

    webdavからのオートコミットの場合は次のようなコミットログが保存されます

    Autoversioning commit:  a non-deltaV client made 
    a change to
    /xxxxx/xxxxx.text ←コミットしたファイルのパス

    オートコミットしたコードの動作確認?
    webdav経由でのオートコミットの場合、そのままではwebdav単体での利用とは違い、即ブラウザから表示確認(動作確認)を行うことが出来ません。表示確認を行う場所を作り、表示確認をするまえにsvn updateを実行する必要があります。
    あらかじめ、サーバ上に動作環境としてソースコードをチェックアウトしておき、
    subversionの機能で、コミットをしたタイミングで、プログラムを実行させるhocksという機能があります。
    これを利用し、あらかじめ用意をしておいたサーバ上の動作環境に対して、svn updateを実行します。

    レポジトリを設置したディレクトリ/hocks/post-commit.tmpl というファイルをpost-commitというファイルにコピーをして、実行権限をつけます

    # cp post-commit.tmpl  post-commit
    # chmod 755 post-commit

    hocksで実行するファイルを、レポジトリのフォルダの中に設置場所を作り、そこに置きました。

    # mkdir レポジトリのフォルダ/script_hocks/
    # chmod 755 レポジトリのフォルダ/script_hocks/
    # chown apache.apache レポジトリのフォルダ/script_hocks/

    実行するファイルを作成

    # vi レポジトリのフォルダ/script_hocks/svnupdate.cgi
    #!/usr/bin/env python
    import os;
    result = os.system("svn update [チェックアウトした場所のパス]");

    このままだと、svn updateをするapacheユーザがsvnのアカウントの情報をもっていない状態なのでrootで、一時的にapacheでログインできるようにし、svn updateをチェックアウトした場所のパス上で一度実行します。
    順番はこんな感じ。

    • apacheが使用するためのsubvsersionのアカウントを作る。(ID,PASSの発行)
    • 上記で作ったアカウントに対してsubvsersionのアクセス権をつける・・・反映させるだけならreadだけでOK
    • サーバ上で、apacheユーザに対して、シェルを使えるように設定する
    • rootからsu apache で、apacheユーザになり、svn updateを実行する。
      • このとき、subversionのIDとPASSを聞かれます。
      • opensslを使用している場合は、接続を許可するかどうかも聞かれます
    • apacheユーザに対して、シェルを使えなくする
      (/sbin/nologinの設定に戻す)

    今回試してみた環境

    • subversion-1.4.4-7
    • httpd-2.2.8-1.fc8
    • python-2.5.1-15.fc8

    補足的に・・・・

    • OS Fedora 8 (・・・そろそろ入れ替えたい)
    • Trac 0.11.2.1.ja1

    関連記事

    –TODO
    CodeIgniterでTDDができるようにする!
     CIUnitを使ってみる
     DocTestをCodeigniterで使えないか試してみるとかしてみる。
     MyNETS2のコードを読んでみる。