アサーションの使い方
データ・プロバイダの利用(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を使えば、あらかじめ用意された機能を利用して、テスト・ケースを作成することができます。また、作成したテストは統一感があるため、別のテストに再利用しやすくなります。
今回は、アサーションの種類や使い分けと、アノテーションを利用したテストの方法について紹介しました。次回は、データベースのテストや、未実装のモジュールを補完してテストする方法について紹介します。