PHPUnitをインストールしたら、早速使ってみます。
まず、テスト対象のファイル「ArrayTest.php」を作成します。
(本家ページより抜粋)
<?php
require_once 'PHPUnit/Framework.php';
class ArrayTest extends PHPUnit_Framework_TestCase
{
public function testNewArrayIsEmpty()
{
// Create the Array fixture.
$fixture = array();
// Assert that the size of the Array fixture is 0.
$this->assertEquals(0, sizeof($fixture));
}
public function testArrayContainsAnElement()
{
// Create the Array fixture.
$fixture = array();
// Add an element to the Array fixture.
$fixture[] = 'Element';
// Assert that the size of the Array fixture is 1.
$this->assertEquals(1, sizeof($fixture));
}
}
?>
まず、require_onceで、PHPUnit/Framework.phpをインポートしておきます。
PHPUnit/Framework.phpは、PEARのライブラリ内に存在しているはずです。(存在しない場合は正しくインストールされていない可能性があります)
次に、テストを行うためのクラスを作成します。
この時、
テストは、メソッド内に記述します。ArrayTest.phpでは、testNewArrayIsEmpty()とtestArrayContainsAnElement()がそうです。
この時、テストメソッドは
testNewArrayIsEmpty()メソッドでは、作成したての配列は、sizeofで計るサイズは0であるはずということをテストしています。
testArrayContainsAnElement()メソッドでは、要素が1つ入っている配列のサイズは1であるはずということをテストしています。
$this->assertEquals()は、継承元のPHPUnit_Framework_TestCaseのメソッドで、引数の両方が等しいことを検証するためのものです。
ファイルの場所にて、コマンドラインで
phpunit <テストのクラス名>
のように入力します。
クラス名を入力して実行するのは、どことなくJavaを連想させますね。
PHPUnitの仕様も、元はといえばJUnitを元に作られているからでしょうか。
C:\>phpunit ArrayTest PHPUnit 3.2.19 by Sebastian Bergmann. .. Time: 0 seconds OK (2 tests)
実行すると、1行目はただの著作権表記です。
その次に「..」と表示されていますが、「.」(ピリオド)は、テストが成功したことを表しています。
テストが1つ成功するたびに1つ表示されるので、今回はtestNewArrayIsEmpty()メソッドとtestArrayContainsAnElement()メソッドの2つが成功したことを示しています。
テストが成功しなかった場合には、代わりに「F」(失敗)や「E」(エラー)、「S」(スキップされた)等が表示されます。
PHPUnitのテストメソッドの制約の1つに、「testで始まるメソッド名であること」というのがありましたが、 この制約は、@testアノテーションをメソッドに付加することで無視することができます。
/**
* @test
*/
public function myExample() {
// メソッド名はtestから始まっていないが、アノテーションによってテストと認識される。
}