PHPUnitの概要と導入

2010年4月7日(水)
伊丹 久兼

テスト・ケースの実装と実行結果(1)

それでは、getMessage()メソッドが正しく"hello world"という文字列を返しているか確認するテストを書いてみます。ユニット・テストでは、assertTrue()、assertEquals()、assertNull()などのアサーション・メソッドを使って、プログラムの実行結果の成功と失敗を判定させます(図3-1)。

図3-1で使っているassertEquals()は、2つの引数が同じ値の場合に成功と判定するので、テスト対象プログラム(Hello.php)のコードでgetMessage()が"hello world"という文字列を返した場合に成功と判定するようにテストを作成することができます。

編集したテスト・ケースをテストしてみます。

<code>
$ phpunit HelloTest

---実行結果:ここから---
PHPUnit 3.4.11 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 3.50Mb

OK (1 test, 1 assertion)
---実行結果:ここまで---
</code>

正常に、1個のテスト(1個のアサーション)が実行されたことが分かります。

<code>
public function testGetMessage()
{
    $this->assertEquals("hello world", $this->object->getMessage());
}
</code>

図3-1:アサーション・メソッド

<code>
public function testGetMessage()
{
    $this->assertEquals("world", $this->object->getMessage());
}
</code>

図3-2:失敗するテスト・ケース

テストケースの実装と実行結果(2)

今度は、あえてテストが失敗するようにコーディングしてみます(図3-2)。編集したテスト・ケースをテストし てみます。

<code>
$ phpunit HelloTest

---実行結果:ここから---
PHPUnit 3.4.11 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 3.50Mb

There was 1 failure:

1) HelloTest::testGetMessage
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-world
+hello world

/tmp/HelloTest.php:39

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
---実行結果:ここまで---
</code>

最終行に"Failures: 1"と表示されていることから、1件失敗があることが分かります。また、中央部の"Failed asserting that two strings are equal."の下に、期待していた文字列と実際に取得した文字列が(差分を表示する)diff形式で出力されています。

このように、PHPUnitを使うと、テスト対象のプログラムからテスト・ケースのひな型を自動生成でき、テスト・メソッドの中でアサーション・メソッ ドを呼び出すことで、テストの期待値と実際の結果を比較させることができます。

今回は、PHPunitの基本を理解できるよう、簡単なテスト・ケースを紹介しました。次回は、より現実的な利用方法を紹介します。

PCIアイオス株式会社

テンアートニ(現サイオステクノロジー)、ゼンド・ジャパンなどを経て現在、PCIアイオスに勤務。これまでに組込み開発からWebシステム開発まで幅広く開発を経験。現在は、オープンソースソフトウェアを利用したシステムの開発、運用、パフォーマンスチューニングを担当。特にLAMP(Linux/Apache/MySQL/PHP)環境を得意とする。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています