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

ご静聴ありがとうございました!