<更新記録>
2008年 5月 30日
執筆

姉妹サイトから検索 Web検索

SWT - JavaでGUIプログラミング
きままにインデックス
JavaScriptノート
ゴルフ道具研究所

PHPUnit expectedExceptionアノテーション

メソッド等の戻り値が期待するものであるかどうかは、assertEquals()等のassertXXXメソッドを使用しましたが、 例外が発生することを確認するためのテストは、expectedExceptionアノテーションを使用します。

使用例を見ながら解説します。

まず、説明のために、光の3原色を表す、RGBクラスを作成します。
このクラスは、コンストラクタ引数に0から255までの値を3つ取得します。
もしもそれ以外の値を受け取った場合、InvalidArgumentExceptionを投げます。

RGB.php
<?php
class RGB {
	var $red;
	var $green;
	var $blue;

	public function __construct($red, $green, $blue) {
		if ($red < 0 || $red > 255) {
			throw new InvalidArgumentException();
		} else if ($green < 0 || $green > 255) {
			throw new InvalidArgumentException();
		} else if ($blue < 0 || $blue > 255) {
			throw new InvalidArgumentException();
		}
	}

	public function getRed() {
		return $this->red;
	}
	
	public function getGreen() {
		return $this->green;
	}
	
	public function getBlue() {
		return $this->blue;
	}
}
?>

RGBクラスのコンストラクタに、正しくない値を指定した時にはInvalidArgumentExceptionが発生することを確認するためのテストは次のようになります。

RGBTest.php
<?php
require_once 'PHPUnit/Framework.php';
require_once 'RGB.php';

class RGBTest extends PHPUnit_Framework_TestCase {
	public static function myDataProvider() {
		return Array(
			Array(-1,0,0),
			Array(256,255,255)
		);
	}

	/**
	 * @dataProvider myDataProvider
	 * @expectedException InvalidArgumentException
	 */
	public function testConstructorError($red, $green, $blue) {
		new RGB($red, $green, $blue);
	}

}
?>

testConstructorError()メソッドの最初のアノテーションは、PHPUnitデータプロバイダを使うためのものです。
myDataProvider()メソッドが、データプロバイダになります。

2番目のアノテーションである「@expectedException」で、 testConstructorError()メソッドの内部でInvalidArgumentExceptionの発生を期待することを宣言しています。

このアノテーションによって、testConstructorError()メソッド内のテストでは、InvalidArgumentExceptionが発生すればテストは成功となります。
逆に言えば、もしもtestConstructorError()メソッドの中でInvalidArgumentExceptionが発生しないと、テストは失敗になります。

このテストを実行した結果です。

C:\>aphpunit RGBTest
PHPUnit 3.2.19 by Sebastian Bergmann.

..

Time: 0 seconds


OK (2 tests)

Powered by VeryEasyCMS