PHPUnit は、PHP 言語用の単体テストフレームワークです。
PEAR を使うと、PHPUnit を簡単にインストールすることができます。
$ pear config-set auto_discover 1
$ pear install pear.phpunit.de/PHPUnit
インストール作業が終わったら、下記のように実行してみてください。
$ php -i | grep include_path
これで表示されるインクルードパスに、PHPUnit/Framework/TestCase.php
などのファイルが含まれていれば、正常にインストールが完了しています。
以下のサンプルでは、内部で数値をカウントするクラス Counter
を、テストコード CounterTest.php
でテストしています。
<?php
class Counter {
private $count; // make it private
public function __construct() {
$this->count = 0;
}
public function getCount() {
return $this->count;
}
public function increment() {
++$this->count;
}
}
<?php
require_once 'Counter.php';
class CounterTest extends PHPUnit_Framework_TestCase {
public function testConstruct() {
$cnt = new Counter();
$this->assertSame($cnt->getCount(), 0);
}
public function testIncrement() {
$cnt = new Counter();
$cnt->increment();
$cnt->increment();
$cnt->increment();
$this->assertEquals($cnt->getCount(), 3);
}
}
テストケースとなるクラス (CounterTest
) は PHPUnit_Framework_TestCase
を継承し、test〜
という名前でテストメソッドを実装していきます。
テストの成功条件は、テストメソッドの中で assert〜
というメソッドを呼び出すことによって表現します(内部的に ==
で比較する assertEquals
よりも、===
で厳密な比較を行う assertSame
を使用することをオススメします)。
テストを実行するには、phpunit
コマンドに、テストを実装している PHP ファイル名(テストケース名)を指定して実行します(.php
は省略可能)。
$ phpunit CounterTest
PHPUnit 3.7.1 by Sebastian Bergmann.
..
Time: 0 seconds, Memory: 4.50Mb
OK (2 tests, 2 assertions)
各テストメソッド(test〜
)の実行前と実行後には、それぞれ setUp()
と tearDown()
メソッドが呼び出されるので、各テストに共通の処理をここに記述しておくことができます。
class CounterTest extends PHPUnit_Framework_TestCase {
private $cnt;
/* Called before each test. */
public function setUp() {
$this->cnt = new Counter();
}
/* Called after each test. */
public function tearDown() {
}
...
}
上記のサンプル内で、CounterTest
クラスは PHPUnit_Framework_TestCase
を extends
していますが、phpunit
コマンドでユニットテストを実行する場合は、何も require_once
する必要はありません。
phpunit
コマンドは実際には PHP スクリプトですが、この内部で PHPUnit/Autoload.php
をロードし、PHPUnit 関連のクラスを使用したときに、自動的に適切な PHP ファイルがロードされるように設定されています。