福岡拠点の永嵜です。
前回に引き続きPHPUnitの機能を紹介します。
今回はデータプロバイダ機能を紹介します。
データプロバイダ機能とは、テストメソッドに任意の引数を渡せる機能です。
データプロバイダを使用すると同じテストメソッドで様々なテストができる利点があります。
データプロバイダ機能
例題を示しながら説明します。
前回使用したテストケースにデータプロバイダを追加します。
■テストケース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
class AreaCalcTest extends TestCase { /** * @dataProvider traiangleProvider */ public function testGetTriangleArea($width,$height,$expected) { $actual = AreaCalc::getTriangleArea($width,$height); //$expected と $actualが等しくない場合エラー $this->assertEquals($expected,$actual); } public function traiangleProvider() { return [ 'ok pattern' => [4, 2, 4], 'ng pattern' => [4, 2, 10], ]; } } |
traiangleProviderメソッドがデータプロバイダになります。
[4, 2, 4]、 [4, 2, 10※1]がテストメソッドに渡す引数になります。
[横、縦、想定値]のデータをテストメソッドに渡します。
配列一つが1テスト用のデータになります。
※1 今回データプロバイダの説明のために想定値に誤った値を設定してテスト失敗を発生させています。
データプロバイダのデータにラベルを付けることができます。
(‘ok pattern’/’ng pattern’)
ラベルを付けることによってテスト失敗時にどのデータで失敗しているかを確認しやすくなります。
データプロバイダからデータを受け取るにはテストメソッドに@dataProviderアノテーションを付けます。
■実行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
vendor\bin\phpunit test\ PHPUnit 7.5.6 by Sebastian Bergmann and contributors. .F 2 / 2 (100%) Time: 853 ms, Memory: 14.00 MB There was 1 failure: 1) Tests\Unit\Test\AreaCalcTest::testGetTriangleArea with data set "ng pattern" (4, 2, 10) Failed asserting that 4 matches expected 10. /var/www/everegi/tests/Unit/Test/AreaCalcTest.php:20 FAILURES! Tests: 2, Assertions: 2, Failures: 1. |
‘ng pattern’のデータでテスト失敗となりました。
また、実行時にfilterオプションを使用すると実行したいテストデータだけテストすることができます。
■データ指定(ok pattern)で実行
1 2 3 4 5 6 7 8 |
vendor\bin\phpunit test\ --filter '@ok pattern' PHPUnit 7.5.6 by Sebastian Bergmann and contributors. . 1 / 1 (100%) Time: 711 ms, Memory: 14.00 MB OK (1 test, 1 assertion) |
最後に
前回、今回、PHPUnitの概要を説明しましたが、PHPUnitには
コマンドオプション、アノテーション、アサーションなど他にも便利な機能があるので詳細を知りたい方は下記をチェックしてみてください。
PHPUnit マニュアル