初心者でも使いやすい!PHPUnitアノテーション活用術/Easy to Use Even for Beginners! PHPUnit Annotation Utilization Techniques
by
y_sone
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
ご静聴ありがとうございました!