PHPUnitでユニットテスト③ パラメータテストを行う方法

PHPUnitでパラメータテスト

PHPUnitでパラメータテストを行う方法をメモします。

環境: PHPUnit 9.5.4、 PHP 7.4.8

パラメータテストとは

パラメータテスト(パラメタライズドテスト)とはユニットテスト対象のひとつのロジックに対し異なるデータで複数パターンをテストする手法のことで、PHPUnitにはパラメータテストを行うための機能が標準で備わっています。

SAMPLE

テスト対象クラスCalculatorに単純な足し算の結果を返すaddメソッドを実装します。

dataProviderを使用する

テストケースクラスCalculatorTestを用意し、dataProviderというパラメータテストを行うための機能を使用してユニットテストを実装します。

addメソッドのテストメソッドtestAddと、テスト用のデータ(パラメータ)を配列に含んだadd_parametersメソッドを用意します。

testAddメソッドに対して@マークで始まるアノテーション記法、@dataProviderをコメントとして適用し、うしろにadd_parametersメソッドを指定することでadd_parameters内の配列内に用意された要素の数だけテストを繰り返し行うことができるようになります。

add_parametersメソッド内、returnに指定された配列のさらに配列となった要素がひとつのパラメータの組みとなり、例えばひとつめの要素内、0, 1, 1の値が、addメソッドの2つの引数と比較用のアサーションメソッドの期待値の変数expectedに割り当てられます。

(テストの実行結果)

Failed asserting that -20 matches expected 20.
「期待値として指定した値は 20ですが、実際には-20が返っています。」

11個のテストパターンのうち、ひとつのテストケースの誤りを見つけることが出来ました。

パラメータのパターンに名前をつける

dataProviderによるパラメータテストでは、テストの意図をわかりやすくするために、用意したパラメータに名前をつけて実行することも出来ます。

受け取った引数の数値が偶数である場合、結果にtrueを返すisEvenメソッドを例にテストします。

Number.php

テストケースクラス NumberTest.php

最初のテストケースクラスと同様、dataProviderを利用しますが、今回はテストパターンのパラメータの配列の要素に連想配列のキーとして名前を付けています。

※要素の値にもそれぞれparamとexpectedと名前を付けてよりわかりやすくしていますが、こちら必須ではありません。

このようにパラメータの組みに名前をつけることで、テスト実行時にfilterオプションを利用してそのパターンのみのテストを行うことが可能となります。

(例) パターン「偶数のテスト」のみをテストする場合

filterオプションで、テストメソッド名@パラメータのパターン名 とする

(補足)
アサーションメソッドの第三引数に指定している文字列が、テスト失敗時に詳細として表示されるようになります。
※assertSameに限りません

Follow me!