Upgrade to Pro — share decks privately, control downloads, hide ads and more …

初心者でも使いやすい!PHPUnitアノテーション活用術/Easy to Use Even for Beginners! PHPUnit Annotation Utilization Techniques

y_sone
June 24, 2023

初心者でも使いやすい!PHPUnitアノテーション活用術/Easy to Use Even for Beginners! PHPUnit Annotation Utilization Techniques

2023年6月24日「PHPカンファレンス福岡2023」にて初登壇。

【検証環境】
- PHP 8.2.5
- PHPUnit 9.6.7
- MacBook Air M1 2020
- macOS Ventura 13.4

y_sone

June 24, 2023
Tweet

More Decks by y_sone

Other Decks in Programming

Transcript

  1. 初心者でも使いやすい!
    PHPUnitアノテーション活用術
    見やすいテストコードとスムーズなテスト実行のために
    PHPカンファレンス福岡2023 on 2023/06/24
    曽根 友希

    View full-size slide

  2. 自己紹介
    曽根 友希
    - 所属: 株式会社viviON
    - Qiita: https://qiita.com/y_sone
    - Webエンジニア5年目
    - PHPカンファレンス初登壇
    @yukinofu815

    View full-size slide

  3. テスト初心者の皆さん、このような悩みを
    抱えていませんか?
    - テストメソッドとテストデータが混在して読みづらい
    - テストの出力結果が見づらい
    - テストの実行範囲を明確にしたい

    View full-size slide

  4. テスト初心者の皆さん、このような悩みを
    抱えていませんか?
    - テストメソッドとテストデータが混在して読みづらい
    - テストの出力結果が見づらい
    - テストの実行範囲を明確にしたい
    それ、PHPUnitのアノテーションを使って解決できるかもしれません!

    View full-size slide

  5. PHPUnitのアノテーションとは
    - テストの動作をカスタマイズするための機能
    - テスト実行コマンドのオプションと合わせて使うことが多い
    - テストメソッドなどのコメント部分に@始まりで記述する
    アノテーション

    View full-size slide

  6. 全体の流れ
    - テストメソッドとテストデータが混在して読みづらい
    - テストの出力結果が見づらい
    - テストの実行範囲を明確にしたい

    View full-size slide

  7. テストメソッドとテストデータが混在して
    読みづらい
    = テストメソッドの中にテストデータと検証メソッドが混在してコードが読みづらい
    - @dataproviderとdata providerを利用する
    - data providerで複数のテストデータをまとめ、テストメソッドで利用する
    - data providerは配列で定義され各要素は1つのテストデータ(配列)を表す
    - Iteratorインターフェイスを実装したオブジェクトを使うことも可能

    View full-size slide

  8. 発表の流れ
    1. テスト対象のコードについて
    2. data provider未使用のテストメソッド
    3. data providerを使用したテストメソッド

    View full-size slide

  9. テスト対象のコード
    戻り値は3種類
    →3パターンのテストデータを作成

    View full-size slide

  10. data provider未使用のテストメソッド
    テストデータ
    検証メソッド

    View full-size slide

  11. data provider未使用のテストメソッド
    テストメソッドに直接テストデータが書き込まれているので・・・
    - テストメソッドの可読性が下がる
    - テスト対象メソッドが変更されテストデータが増える都度、テストメソッドのコードを修
    正する必要がある
    - 他のテストメソッドでテストデータを再利用することができない

    View full-size slide

  12. data providerを使用したテストメソッド
    個々のテストデータの要素
    テストデータの集まり

    View full-size slide

  13. data providerを使用したテストメソッド
    テストメソッドからテストデータを切り離したことにより・・・
    - テストメソッドの可読性が上がる
    - テスト対象メソッドが変更されテストデータが増える場合は、data providerへテスト
    データを追加するだけで対応できる
    - 他のテストメソッドでテストデータを再利用することができる

    View full-size slide

  14. テストの出力結果が見づらい
    - @testdoxとtestdoxオプションを利用する
    - testdoxはテスト結果を読みやすく表現するための機能
    - @testdoxとdata providerを組み合わせてテストの出力結果をより読みやすく表
    現できる

    View full-size slide

  15. 発表の流れ
    1. testdox未使用のテスト出力結果
    2. testdoxを使用したテスト出力結果
    3. @testdoxとdata providerを使用したテスト出力結果

    View full-size slide

  16. testdox未使用のテスト出力結果

    View full-size slide

  17. testdoxを使用したテスト出力結果
    - data providerなし - data providerあり
    ・クラス名
    ・テストメソッド名
    ・クラス名
    ・テストメソッド名
    ・data providerの各要素のキー値

    View full-size slide

  18. @testdox × data providerのテスト出力結果
    - data providerの各要素のキーにテストデータの説明を設定する

    View full-size slide

  19. @testdox × data providerのテスト出力結果
    - @testdoxにdata providerのテストデータの情報を組み込む
    dataproviderの各要素のキー値
    個々のテストデータの要素

    View full-size slide

  20. @testdox × data providerのテスト出力結果
    - data providerの情報がテスト出力結果の文言に反映され分かりやすくなった

    View full-size slide

  21. テストの実行範囲を明確にしたい
    - テストの実行範囲を明確にせず制限しない場合、無関係なテストも実行されるため
    テストの作業効率が落ちる
    - @groupとgroupオプションを利用
    - groupを使いテストケースやテストメソッドをカテゴリ分けする

    View full-size slide

  22. 発表の流れ
    1. @groupを使ってgroupを設定する
    2. groupオプションを使いテストを実行する(準備〜実行)
    3. groupオプションとtestsuiteオプションを合わせて使う
    4. 使用上の注意

    View full-size slide

  23. @groupを使ってgroupを設定する
    複数設定も可能
    ※エイリアスも使用可
     ・@author
     ・@ticket
    テストメソッドに設定
    クラスに設定

    View full-size slide

  24. groupオプションを使いテストを実行する(準備)
    testsuite: unit

    View full-size slide

  25. groupオプションを使いテストを実行する(実行)
    group: hoge

    View full-size slide

  26. groupオプションとtestsuiteオプションを合わせ
    て使う
    testsuite:unit かつ group: hoge

    View full-size slide

  27. 使用上の注意
    - 設定の自由度が高い反面、記述が乱立し管理が難しくなる可能性がある
    - groupの使用有無や命名規則、設定単位についてチーム内で認識を合わせ
    た方が良い
    - testsuite × filterでテストの実行範囲を絞る方法もアリ

    View full-size slide

  28. まとめ
    紹介した機能は明日からでもすぐに使える簡単なものです。
    アノテーションを活用し、見やすいテストコードでスムーズにテストを実行しましょう!

    View full-size slide

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

    View full-size slide