「at()」「withConsecutive()」の廃止から立ち返って考えてみる、良い単体テストの設計 by きんじょうひでき

PHPerKaigi 2024
レギュラートーク(20分)

「at()」「withConsecutive()」の廃止から立ち返って考えてみる、良い単体テストの設計

o0h_ きんじょうひでき o0h_
2

PHPUnitのメジャーバージョンアップ、9.xから10.0の移行には「大きな変更が含まれている」という印象を持っている人も多そうです。
とりわけ、PHPUnit\Framework\TestCase::at()PHPUnit\Framework\MockObject\Rule\ConsecutiveParameters() のdeprecatedについては、移行に際して不安を感じる声もチラホラと耳にします。
ここでの頭痛の種は、「今まで使ってきたテストコードを、どう置き換えればいいか」というものです。
フレームワークのAPI的な意味での「使えなくなる」ではなく、テストの意図と実現方法の見直しを促すという意味で、本当にBraaking Changeと言えます。

PHPUnitは、これまでも「利用者に適切なテストコードを書くことを促す」ように進化をしてきました。
では、 at() withConsecutive() のない世界が来ることで、我々は何を得られるのでしょう?
この変更をきっかけとして、「どんなテストが良い単体テストなのか」について考察します

伝えたいこと

  • 良いテストの価値: 寿命、偽陽性/偽陰性、理解容易性
  • テストコードとプロダクトコードの「疎結合」を意識する、実践する