アサーションの使い方

データ・プロバイダの利用(1)
データ・プロバイダを利用することで、あらかじめ定義したデータ・セットに基づいたテストを簡潔に記述することができます。
まずは、@assertアノテーションで自動生成したテスト・ケースと比較するために、同様のテストをデータ・プロバイダを使って記述してみます(図3-1)。
データ・プロバイダを利用するため、testEvaluate()メソッドのコメント部分に@dataProviderアノテーションを記述します。このアノテーションは引数に、データを提供するデータ・プロバイダ・メソッド名を指定します。この例では、provider()メソッドがデータ・プロバイダ・メソッドです。
provider()メソッドでは、テストで使用されるデータ・セットを配列で返すよう実装します。配列の各要素はテスト・メソッドの引数に合わせて自由に定義できます。
/**
* @dataProvider provider
*/
public function testEvaluate($n, $expected)
{
$this->assertEquals(
$expected,
$this->object->evaluate($n)
);
}
public function provider()
{
return array(
array(3, 'Fizz'),
array(5, 'Buzz'),
array(15, 'FizzBuzz'),
);
}
|
| 図3-1:データ・プロバイダを使って記述したテスト(1) |
/**
* 'Fizz', 'Buzz', 'FizzBuzz'を返すことを確認する
*
* @dataProvider provider
*/
public function testEvaluateReturnsFizzBuzz($n, $expected)
{
$this->assertEquals(
$expected,
$this->object->evaluate($n)
);
}
/**
* ''を返すことを確認する
*
* @dataProvider provider2
*/
public function testEvaluateReturnsEmpty($n)
{
$this->assertEquals(
'',
$this->object->evaluate($n)
);
}
public function provider()
{
return array(
array(3, 'Fizz'),
array(5, 'Buzz'),
array(15, 'FizzBuzz'),
);
}
/**
* 3と5の倍数以外のデータを返す。
*/
public function provider2()
{
$data = array();
for ($i = 1; $i < 100; $i++) {
if (!($i % 3)) continue;
if (!($i % 5)) continue;
$data[] = array($i);
}
return $data;
}
|
| 図3-2:データ・プロバイダを使って記述したテスト(2) |
データ・プロバイダの利用(2)
図3-2の例では、データ・プロバイダ・メソッドを2つ用意して、FizzBuzz文字列を返す場合と、何も返さない場合についてテストを行います。2つのテスト・メソッドでそれぞれ異なるデータ・プロバイダ・メソッドを、@dataProviderアノテーションで指定しています。
provider2()は、1から100までの間で、3と5の倍数以外をデータとして返します。このように、固定値のデータを返すだけでなく、プログラム的にテスト・データを生成することが可能なので、より多くのデータについてテストを実施することができます。
作成したテストを実行して、結果を確認します。
--------------------------------------------------------------------------------
phpunit FizzBuzzTest2
PHPUnit 3.4.12 by Sebastian Bergmann.
........................................................
Time: 0 seconds, Memory: 6.00Mb
OK (56 tests, 56 assertions)
--------------------------------------------------------------------------------
56回のアサーションがすべて成功し、無事にテストが成功しました。
このように、PHPUnitを使えば、あらかじめ用意された機能を利用して、テスト・ケースを作成することができます。また、作成したテストは統一感があるため、別のテストに再利用しやすくなります。
今回は、アサーションの種類や使い分けと、アノテーションを利用したテストの方法について紹介しました。次回は、データベースのテストや、未実装のモジュールを補完してテストする方法について紹介します。

