初心者でも使いやすい!PHPUnitアノテーション活用術/Easy to Use Even for Beginners! PHPUnit Annotation Utilization Techniques
by
y_sone
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
初心者でも使いやすい! PHPUnitアノテーション活用術 見やすいテストコードとスムーズなテスト実行のために PHPカンファレンス福岡2023 on 2023/06/24 曽根 友希
Slide 2
Slide 2 text
自己紹介 曽根 友希 - 所属: 株式会社viviON - Qiita: https://qiita.com/y_sone - Webエンジニア5年目 - PHPカンファレンス初登壇 @yukinofu815
Slide 3
Slide 3 text
テスト初心者の皆さん、このような悩みを 抱えていませんか? - テストメソッドとテストデータが混在して読みづらい - テストの出力結果が見づらい - テストの実行範囲を明確にしたい
Slide 4
Slide 4 text
テスト初心者の皆さん、このような悩みを 抱えていませんか? - テストメソッドとテストデータが混在して読みづらい - テストの出力結果が見づらい - テストの実行範囲を明確にしたい それ、PHPUnitのアノテーションを使って解決できるかもしれません!
Slide 5
Slide 5 text
PHPUnitのアノテーションとは - テストの動作をカスタマイズするための機能 - テスト実行コマンドのオプションと合わせて使うことが多い - テストメソッドなどのコメント部分に@始まりで記述する アノテーション
Slide 6
Slide 6 text
全体の流れ - テストメソッドとテストデータが混在して読みづらい - テストの出力結果が見づらい - テストの実行範囲を明確にしたい
Slide 7
Slide 7 text
テストメソッドとテストデータが混在して 読みづらい = テストメソッドの中にテストデータと検証メソッドが混在してコードが読みづらい - @dataproviderとdata providerを利用する - data providerで複数のテストデータをまとめ、テストメソッドで利用する - data providerは配列で定義され各要素は1つのテストデータ(配列)を表す - Iteratorインターフェイスを実装したオブジェクトを使うことも可能
Slide 8
Slide 8 text
発表の流れ 1. テスト対象のコードについて 2. data provider未使用のテストメソッド 3. data providerを使用したテストメソッド
Slide 9
Slide 9 text
テスト対象のコード 戻り値は3種類 →3パターンのテストデータを作成
Slide 10
Slide 10 text
data provider未使用のテストメソッド テストデータ 検証メソッド
Slide 11
Slide 11 text
data provider未使用のテストメソッド テストメソッドに直接テストデータが書き込まれているので・・・ - テストメソッドの可読性が下がる - テスト対象メソッドが変更されテストデータが増える都度、テストメソッドのコードを修 正する必要がある - 他のテストメソッドでテストデータを再利用することができない
Slide 12
Slide 12 text
data providerを使用したテストメソッド 個々のテストデータの要素 テストデータの集まり
Slide 13
Slide 13 text
data providerを使用したテストメソッド テストメソッドからテストデータを切り離したことにより・・・ - テストメソッドの可読性が上がる - テスト対象メソッドが変更されテストデータが増える場合は、data providerへテスト データを追加するだけで対応できる - 他のテストメソッドでテストデータを再利用することができる
Slide 14
Slide 14 text
テストの出力結果が見づらい - @testdoxとtestdoxオプションを利用する - testdoxはテスト結果を読みやすく表現するための機能 - @testdoxとdata providerを組み合わせてテストの出力結果をより読みやすく表 現できる
Slide 15
Slide 15 text
発表の流れ 1. testdox未使用のテスト出力結果 2. testdoxを使用したテスト出力結果 3. @testdoxとdata providerを使用したテスト出力結果
Slide 16
Slide 16 text
testdox未使用のテスト出力結果
Slide 17
Slide 17 text
testdoxを使用したテスト出力結果 - data providerなし - data providerあり ・クラス名 ・テストメソッド名 ・クラス名 ・テストメソッド名 ・data providerの各要素のキー値
Slide 18
Slide 18 text
@testdox × data providerのテスト出力結果 - data providerの各要素のキーにテストデータの説明を設定する
Slide 19
Slide 19 text
@testdox × data providerのテスト出力結果 - @testdoxにdata providerのテストデータの情報を組み込む dataproviderの各要素のキー値 個々のテストデータの要素
Slide 20
Slide 20 text
@testdox × data providerのテスト出力結果 - data providerの情報がテスト出力結果の文言に反映され分かりやすくなった
Slide 21
Slide 21 text
テストの実行範囲を明確にしたい - テストの実行範囲を明確にせず制限しない場合、無関係なテストも実行されるため テストの作業効率が落ちる - @groupとgroupオプションを利用 - groupを使いテストケースやテストメソッドをカテゴリ分けする
Slide 22
Slide 22 text
発表の流れ 1. @groupを使ってgroupを設定する 2. groupオプションを使いテストを実行する(準備〜実行) 3. groupオプションとtestsuiteオプションを合わせて使う 4. 使用上の注意
Slide 23
Slide 23 text
@groupを使ってgroupを設定する 複数設定も可能 ※エイリアスも使用可 ・@author ・@ticket テストメソッドに設定 クラスに設定
Slide 24
Slide 24 text
groupオプションを使いテストを実行する(準備) testsuite: unit
Slide 25
Slide 25 text
groupオプションを使いテストを実行する(実行) group: hoge
Slide 26
Slide 26 text
groupオプションとtestsuiteオプションを合わせ て使う testsuite:unit かつ group: hoge
Slide 27
Slide 27 text
使用上の注意 - 設定の自由度が高い反面、記述が乱立し管理が難しくなる可能性がある - groupの使用有無や命名規則、設定単位についてチーム内で認識を合わせ た方が良い - testsuite × filterでテストの実行範囲を絞る方法もアリ
Slide 28
Slide 28 text
まとめ 紹介した機能は明日からでもすぐに使える簡単なものです。 アノテーションを活用し、見やすいテストコードでスムーズにテストを実行しましょう!
Slide 29
Slide 29 text
ご静聴ありがとうございました!