NetBeans 6.7 Beta をインストールしていじっていると、環境設定 > PHP に「PHPUnit スクリプト」という項目が!
というわけで試してみました。
環境設定
PHP5 は MacPortsで、PHPUnit は pear でインストールしています。
sudo port install php5 +apache2 +mysql5 +pear +readline +pcntl +postgresql83 +sqlite sudo pear channel-discover pear.phpunit.de sudo pear install -a phpunit/PHPUnit
- PHP 5 インタプリタ は /opt/local/bin/php
- PHPUnit スクリプト は /opt/local/bin/phpunit
- 大域インクルードパスに /opt/local/lib/php
を追加しましょう。
PHPUnitのサンプルプロジェクトをつくる
ファイル→新規プロジェクトでプロジェクトを作ります。プロジェクト名はまぁ適当に、phpunit_sample とかで。
最初から、index.php が作成されますが、削除します。そのかわりに、簡単なクラスを作成します。ソースファイル直下でCalc.phpで保存してみます。
<?php class Calc { function add($a, $b) { return null; } } ?>
テストケースの自動生成
Calc.php を保存したら次はテストを作ってみます。(TDD ではテストを書いてから実装しますが、今回はテストの自動生成のために逆の手順でやっています)
まず、テストを保存するフォルダを作ります。プロジェクトウインドウのphpunit_sampleプロジェクトで、右クリックして新規→フォルダを選び、testsというフォルダを作ります。(初回だけ)
次に、Calc.php を右クリックし、ツール→PHPUnit テストを作成を選びます。
ダイアログボックスが出てきますが、ここで先ほど作成した testsを選択します。(これも初回だけ)
そうするとCalcTest.phpが作成され、スクリプトのひな形がすでに作られた状態になります。
テストの実行
NetBeansでPHPUnitが実行できます。
実行→プロジェクト (phpunit_sample) をテストを選ぶか、Shift + F6 でテスト実行です。
実行したところ、実はテスト項目がないらしいです。CalcTest.phpを調べてみると、
<?php // 中略 class CalcTest extends PHPUnit_Framework_TestCase { // 中略 /** * @todo Implement testAdd(). */ public function testAdd() { // Remove the following lines when you implement this test. $this->markTestIncomplete( 'This test has not been implemented yet.' ); } } ?>
という感じで、テストコードはまだありませんでした。ご丁寧に @todo までついています。「あ、あんたのためにひな形を生成したんじゃないんだからね。はやくテストを書きなさいよ!」というわけですね。どういうわけだ。
<?php // 中略 class CalcTest extends PHPUnit_Framework_TestCase { // 中略 public function testAdd() { $this->assertEquals(5, $this->object->add(2, 3)); } } ?>
addメソッドは静的なユーティリティメソッドを想定してつくったので、Calc::add(...)でもよかったんですが、上のように書きました。テスト実行。
こんどはスカスカの実装をなおします。
<?php class Calc { function add($a, $b) { return $a + $b; } } ?>
おまけ
メソッド名は日本語もいけますし、第1回 PHPUnit入門:PHPUnit3で始めるユニットテスト|gihyo.jp … 技術評論社のように @test を使うと、テストメソッドに test をつけなくてもよくなるので、テストメソッドを日本語にして、結果をわかりやすく表示することもできます。