320 Views
July 25, 25
スライド概要
関西PHP勉強会 x PHP勉強会@東京 で話した資料です
データプロバイダーをよく知ろう! 関西PHP勉強会 × PHP勉強会@東京
● 荒巻 拓哉 自己紹介 ● X: @takaram71 ● 株式会社ラクス
PHPUnit Calculator::add(int, int) のテストを書く
PHPUnit 1+1=2 だけでいいの? Calculator::add(int, int)● のテストを書く ○ 4+6 は? ○ ○ 1+(-1) は? -3+1 は?
PHPUnit ● 引数が違うだけのテストメソッドが増殖 ● モックの準備などで行数が増えるとカオスに……
データプロバイダー
データプロバイダー パラメタライズドテスト と呼んだりします
データプロバイダー PHPUnit9まで
データプロバイダー テストケース名 テストメソッドの引数
データプロバイダー
データプロバイダー
データプロバイダー用のアトリビュート データプロバイダー利用に使えるアトリビュートは4種類 https://docs.phpunit.de/en/11.5/attributes.html#data-provider ● #[DataProvider] ● #[DataProviderExternal] ● #[TestWith] ● #[TestWithJson]
#[DataProvider] / #[DataProviderExternal] ● 引数の配列の配列(またはイテレータ)を返すメソッドを指定 ● 他クラスのメソッドを使うときは #[DataProviderExternal]
#[DataProvider] / #[DataProviderExternal] ● メリット ○ メソッドなので柔軟 ○ 複数メソッドで使い回せる ● デメリット ○ テストメソッドとデータプロバイダーメソッドの対応が見えづ らい このデータプロバイダー どこのテストで 使われてるの?
#[TestWith] / #[TestWithJson] ● テストメソッドの引数配列を直接指定 ● #[TestWithJson] は配列の代わりにJSON文字列
#[TestWith] / #[TestWithJson]
#[TestWith] / #[TestWithJson] ● メリット ○ テストメソッドと値がそばにあってわかりやすい ● デメリット ○ 複雑なことはできない
(余談) TestWith の歴史 ● PHPUnit 9 まで ○ JSON形式 ■ 文字列はシングルクォーテーション不可
(余談) TestWith の歴史 ● PHPUnit 10 ○ Attribute化!
(余談) TestWith の歴史 ● PHPUnit 11~ ○ テストケース名を書けるように🎉
まとめ ● パラメタライズドテスト ○ 使い所によっては便利 ● #[DataProvider] だけでなく #[TestWith] も ○ PHPUnit 11以降は特に使いやすい