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

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

mashirou1234
December 22, 2024

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

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