&strlen()文字
SimpleTestはPHPUnitと比べてはるかに多くのテスト用メソッドが用意されています。ここではSimpleTestの基本となるUnitTestCaseに実装されているテスト用メソッドの判定条件と、そのメソッドを使った実際に動作するテストケースを用意しました。これらのメソッドを利用して、テストの結果が特定の条件を満たしているかどうかをチェックします。一部のメソッドは古いバージョンにはなかったり、PHP4とPHP5で挙動がちがったりするので気を付けて下さい。(今回のテストケースはPHP5で動作させています。)
2つの変数の値が同じ時に成功します。
function testAssertEqual(){
$a = 'hoge';
$b = 'huga';
$this->assertEqual($a, $b);
$a = $b;
$this->assertEqual($a, $b);
}
assertEqualの逆で、2つの値が同じでない場合成功になります。
function testAssertNotEqual(){
$a = 'hoge';
$b = 'huga';
//同じでないので成功
$this->assertNotEqual($a, $b);
$a = $b;
//同じなので失敗
$this->assertNotEqual($a, $b);
}
エラーが発生した時に成功します。
function testAssertError()
{
//エラーは発生していないので失敗
$this->assertError();
trigger_error('error');
//エラーが発生したので成功
$this->assertError();
}
エラーの中にPerlの正規表現で指定した文字列が含まれている場合、成功します。
function testAssertErrorPattern()
{
//エラーメッセージがhogeだったら
$pattern = '/hoge/';
//エラーが発生していないので失敗
$this->assertErrorPattern($pattern);
trigger_error('huga');
//エラーは発生しているがエラーメッセージがhogeではないので失敗
$this->assertErrorPattern($pattern);
trigger_error('hoge');
//hogeというエラーメッセージのエラーが発生したので成功
$this->assertErrorPattern($pattern);
}
エラーがなければ成功。ひとつでもあれば失敗になります。
function testAssertNoErrors()
{
//エラーがないので成功
$this->assertNoErrors();
trigger_error('error');
//エラーがあるので失敗
$this->assertNoErrors();
}
対称のオブジェクトが特定のクラスがどうかを調べ、特定のクラスであれば成功。対称のオブジェクトが特定のクラスのサブクラスであっても成功となります。
function testAssertIsA()
{
$a = new Hoge();
//Hogeを継承したHogeHoge
$b = new HogeHoge();
//$aはHogeクラスなので成功
$this->assertIsA($a, 'Hoge');
//指定するクラス名は小文字でも良い(成功)
$this->assertIsA($a, 'hoge');
//$bの親クラスはHogeなので成功
$this->assertIsA($b, 'Hoge');
}
特定のオブジェクトが指定したクラスでなければ成功となります。assertIsAの全く逆の挙動になるので、特定のオブジェクトが指定したクラスのサブクラスであっても失敗になります。
function testAssertNotA()
{
$a = new Hoge();
//Hogeを継承したHogeHogeクラス
$b = new HogeHoge();
//クラス名が同じなので失敗
$this->assertNotA($a, 'Hoge');
//違うので成功
$this->assertNotA($a, 'huga');
//指定したクラスのサブクラスなので失敗
$this->assertNotA($b, 'Hoge');
}
2つの変数の値と型が一致していた場合成功します。
function testAssertIdentical()
{
$a = '0';
$b = 0;
//数字は同じだが型が違うので失敗
$this->assertIdentical($a, $b);
//文字列0を数値0にキャスト
$a = (int)$a;
//値も型も同じなので成功
$this->assertIdentical($a, $b);
}
assertNotIdenticalと逆で2つの変数が値、型、ともに違えば成功になります。
function testAssertNotIdentical()
{
$a = '0';
$b = 0;
//2つの値は同じだが型は違うので成功
$this->assertNotIdentical($a, $b);
$a = (int)$a;
//型も同じになったので失敗
$this->assertNotIdentical($a, $b);
}
このメソッドは、引数の型がNULL以外の場合テストに失敗します。 以下のテストは両方とも成功になります。
function testAssertNull()
{
$target = null;
$this->assertNull($target, 'type is ' . gettype($target));
//未定義の変数はNULLなので成功
$this->assertNull($undefined, 'type is ' . gettype($undefined));
}
assertNullと逆の動作になります。
function testAssertNotNull()
{
$target = 'aa';
$this->assertNotNull($target, 'type is ' . gettype($target));
//未定義の変数はNULLなので失敗
$this->assertNotNull($undefined, 'type is ' . gettype($undefined));
}
特定の文字列に指定したパターンがマッチすれば成功になります。パターンはPerlの正規表現で記述します。バージョン1.0.1alpha以降で利用できます。
function testAssertPattern()
{
$subject = 'hoge';
$pattern = '/gigigi/';
//hogeにgigigiは存在しないので失敗
$this->assertPattern($pattern, $subject);
$subject = 'gigigi';
//変数の内容が変わりマッチするようになったので成功
$this->assertPattern($pattern, $subject);
}
assertPatternと逆の動作をします。バージョン1.0.1alpha以降で利用できます。
function testAssertNoPattern()
{
$subject = 'hoge';
$pattern = '/gigigi/';
//hogeにgigigiは存在しないので成功
$this->assertNoPattern($pattern, $subject);
$subject = 'gigigi';
//変数の内容が変わりマッチするようになったので失敗
$this->assertNoPattern($pattern, $subject);
}
2つの変数がどちらかの参照渡し(Reference)である場合に成功します。
function testAssertReference(){
$a = new Hoge();
$b = clone $a;
//copyなので失敗
$this->assertReference($a, $b);
$a =& $b;
//参照なので成功
$this->assertReference($a, $b);
}
PHP5から代入はデフォルトで参照渡しになったのでこの関数のテストはPHP4とPHP5で挙動がかわります。
assertReferenceと逆の動作をします。
function testAssertCopy(){
$a = new Hoge();
$b = clone $a;
$this->assertCopy($a, $b);
$a =& $b;
$this->assertCopy($a, $b);
}
PHP5から代入はデフォルトで参照渡しになったのでこの関数のテストはPHP4とPHP5で挙動がかわります。
assertPatternと同じ挙動です。既存のシステムとの互換性を保つ為に用意されているだけなので基本的にassertPatternを使って下さい、(非推奨メソッド)
assertNoPatternと同じ挙動です。既存のシステムとの互換性を保つ為に用意されているだけなので基本的にassertNoPatternを使って下さい、(非推奨メソッド)
第二引数が、「第一引数±第三引数」の間にある場合に成功します。バージョン1.0.1alpha以降で利用できます。
function testAssertWithinMargin()
{
$a = 100;
$b = 105;
$c = 10;
//105は90と110の間にあるので成功
$this->assertWithinMargin($a, $b, $c);
}
assertWithinMarginと逆の動作になります。バージョン1.0.1alpha以降で利用できます。
function testAssertOutsideMargin()
{
$a = 100;
$b = 105;
$c = 10;
//105は90と110の間にあるので失敗
$this->assertWithinMargin($a, $b, $c);
}
以上がユニットテストケースクラスの基本のassertメソッドです。assertメソッド一覧の解説は本家サイトにもないので、複雑なメソッドを利用する時に役立つと思います。