諸々の理由でCodeIgniterで開発してるんだけど、時間がないのでなんとなくTDDでやってる。テストありきのほうが戻りが少ないだろうという理由。
そんなわけでCIUnitにKenji_sがパッチを当てたバージョンを使ってるのだが、コントローラのテストのためにPOSTとGETをクリアしたくなったのと、今作ってるやつが複数DBを見る構造(これも諸々の理由)なので複数DBに接続して結果を見たかったのでちょっといじった。そのパッチ。
CodeIgniterは3系の話が出てるんで、出たらまた変わりそうだけど、RequirementがPHP5.3系になる(ツッコミもらった。ツッコミの通り、3系も5.2.4以降が対象だそう。ただ5.2は2011年でEOLになってるし、5.3もあと1年くらいなので、これから作るなら5.4以降だといいのでは。と言いつつ殆どの人はレン鯖のバージョンに引っ張られるんだろうしな。今見てるプロダクトも5.1が絶賛稼働中だし。)んで、5.3ならFuelPHPでいいんじゃないかな。Kenji_sも今はFuelPHPのほう使ってるようで、Issue溜まってるし。CodeIgniterはControllerのインスタンスにClassLoaderがロードしたクラスを変数として外挿するような密結合な作りなのでUnitTest書いててどうも不可思議なことが多くて困る。
なんというか、PHP自体があんまりUnitTest向きじゃないと思う。理由は、POSTとGETを処理系が勝手にグローバル変数にしてしまう点と、出力が本当にそのまま出力な点。register_globalsをしないようにしたところで、POSTとGETというグローバル変数に置いてしまうのだからどうしようもない。まあクリアすりゃいいんだけど。出力の方はもうどうしようもなくて、油断してPHPタグの外にスペースを書こうものなら出力されるし。
CIUnitで書いていいのはモデルのテストまでで、Controllerのテストはせずに、振る舞いのテストをCucumberでやるほうがいいんじゃないかとも思う。今のプロジェクトではやらんけど…。
PHPUnitそのまま使えるっぽいな。これでよかったかもしれぬ。
追記:ジェームズの記事読んだけどフレームワークのコード変えたりしてるな。やってることもCIUnitと似てる(index.phpをbootstrapとして使うとか)。CIUnitならfixtureの読み込みがかなり簡略化されてるし、DB設定もCodeIgniterそのままだし楽。PHPUnitだとDBUnit入れたり、fixutureをYAMLで書きたかったPHPUnit_Extensions_Database_DataSet_YamlDataSetを使うようにしたりしないといかんのが面倒。ただPHPUnitを直接使うユーザのほうが多いので、ハマるとこは少ないし、そっちのほうが応用は効くよな。
『Google Androidプログラミング入門改訂2版』『入門Chef Solo - Infrastructure as Code』『はじめてのフレームワークとしてのFuelPHP』を購入しました tatsu-zine.com/books/androidp…
— kuwa1 (@kuwashima) April 13, 2013