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

PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録

Avatar for mashirou1234 mashirou1234
December 22, 2024

PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録

Avatar for mashirou1234

mashirou1234

December 22, 2024
Tweet

More Decks by mashirou1234

Other Decks in Programming

Transcript

  1. 自己紹介 株式会社 Gladiolus LAB 取締役CTO PHP歴:9年くらい 変遷のようなもの: 2014 ~ 2018:SES事業会社

    所属 2018 ~ 2022:現親会社 C-Garden 取締役 2022 ~ 現在 :Gladiolus LAB 取締役 CTO 柚口ましろう 登壇させていただいたPHPカンファレンス関係 ・PHP Conference   2019   2023   2024 ← new! ・PHPerKaigi   2022   2024
  2. 実装しよう! https://github.com/mashirou1234/demo-php-confe rence-2024/blob/main/app/Console/Commands/As signCleaningSchedule.php とりあえず作ってみた ・清掃スケジュール週次登録    バッチという「てい」 ・毎週土曜日になったらバッチ が 実行されて登録する

     (スケジューラーは今回ス  コー プアウトしました) ・首都圏3県を対象に清掃対象  物件に人を割り振る仕組み ※詳しくはGithubのURLをご参照くだ  さい (実際にSailでコンテナ起動すれば動  かせるようになっています)
  3. テストコードを 書こう! https://github.com/mashirou1234/demo-php-confe rence-2024/blob/main/tests/Feature/AssignCleanin gScheduleTest.php ざっくりテスト検証 ・それぞれの県の清掃対象物件を Factoryで仮想登録 ・それぞれの県で担当する人数分を Factoryで仮想登録

    ・とりあえずバッチ実行してスケジュール登録 ・スケジュール登録件数が一致していることを確認する  (登録内容の完全一致のデータ検証も本来なら必要  だが、今回は割愛) ・細かいテストも書きました(詳細は Githubから)
  4. テストコードを 書こう! https://github.com/mashirou1234/demo-php-confe rence-2024/blob/main/tests/Feature/AssignCleanin gScheduleTest.php ざっくりテスト検証 ・それぞれの県の清掃対象物件を Factoryで仮想登録 ・それぞれの県で担当する人数分を Factoryで仮想登録

    ・とりあえずバッチ実行してスケジュール登録 ・スケジュール登録件数が一致していることを確認する  (登録内容の完全一致のデータ検証も本来なら必要  だが、今回は割愛) ・細かいテストも書きました(詳細は Githubから)
  5. 所感 (主観) • PHPUnitでご飯を食べている人(ワイ) ◦ シナリオテストには向いてなさそう Feature系は、例えば単純な GET/POSTなら良いが、 複雑な処理や大掛かりな シナリオテストなると

    条件付けが増えるにつれて Pestの旨味を活かした感じを体感仕切れて いない Pestの性質上PHPUnitと大した差はない ◦ ユニットテストとの相性は抜群 細かいテストや連結系テストには 大変強い感覚がある Pest自体がLaravel特化なので、 Eloquentとかのコアパッケージが 混ざったテストが書きやすい
  6. 所感 (弊社メンバー) • テストコードを書いたことない場合 ◦ テストだけどコードを書く感覚は変わらないの でそんな悩まなくてすみそう • PHPUnitに触れたことない人だったら ◦

    メソッドチェーンで書けるのはわかりやすい ◦ JUnitだと1シナリオで全部を盛り盛りにするこ とがあるから、結局4~5000行とかのテスト コードから追わなきゃなので結局面倒になる のがPHPUnitも同じと聞いていたので、Pest ならいいかも
  7. まとめ ポジティブ • PHPUnitをクロージャで書いているような感覚 • DataProvider等でテスト内容を切り出すとかを しないでも良い (逆説的にデータを汎用に作れば良い) • いざコードを読んだときに感覚的に何している

    かを把握しやすい ネガティブ • シナリオテストなどの大まかなテストは得意で なさそうなのでPHPUnitで書いた方が安全そう • (個人的に)UnitをPest、FeatureをPHPUnit (Codeception)にするのが良いかも?
  8. EOF