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
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をインストールしてみたら、テストが通るようになりました。
なぜだかはわからないけれども、
とにかくテストを書く手前までたどり着けました(><)ノ