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

RemoveだらけのPHPUnit 12に備えよう

02
February 22, 2025

RemoveだらけのPHPUnit 12に備えよう

2025/02/22 PHPカンファレンス名古屋2025 LTで使用したスライドです
https://fortee.jp/phpcon-nagoya-2025/proposal/914286b9-9140-4208-b2b8-d85fd8de2b85

02

February 22, 2025
Tweet

More Decks by 02

Other Decks in Technology

Transcript

  1. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう | BASE,

    Inc. Removeだらけの PHPUnit 12に備えよう 02 @PHPカンファレンス名古屋 2025 2025.02.22
  2. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう Speaker Profile

    2 02 Otsu Kazuki BASE BANK Dept. Engineering Program Manager :@cocoeyes02 PHPカンファレンス 2024 実行委員長
  3. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 3 https://phpunit.de/supported-versions.html

    PHPUnit 12 has been released! PHPUnit の最新バージョン 12が、2025/02/07にリリース 🎉
  4. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう #phpcon_nagoya Removeだらけの

    PHPUnit 12に備えよう 4 PHPUnit 12 has been released! PHPUnit 12.0でRemove対応し たissueは、23個! (機能はもっとある) https://github.com/sebastianbergmann/phpunit/bl ob/12.0/ChangeLog-12.0.md#removed
  5. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう © 2012-2025

    BASE, Inc. 5 全部解説したいが LTの制限時間は 5分 5
  6. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 8 今日話すこと

    • PHPUnit12のRemoveされた機能の対応方法を知る、 もしくは現実を知る ◦ 方針1:PHP標準関数を使う ◦ 方針2:決められたフォーマットや、思想に従う ◦ 方針3:ときには設計を見直す ◦ 現実:代替手段はない
  7. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう #phpcon_nagoya Removeだらけの

    PHPUnit 12に備えよう 10 #5215 Remove TestCase::iniSet() • テスト中だけ、特定の php.iniの設定を一時的に 書き換えられる • 大人しくPHP標準関数の ini_set()を使う 方針1:PHP標準関数を使う
  8. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう #phpcon_nagoya Removeだらけの

    PHPUnit 12に備えよう 11 #5217 Remove TestCase::setLocale() • テスト中だけ、特定のロ ケール情報を一時的に書 き換えられる • 大人しくPHP標準関数の setLocale()を使う 方針1:PHP標準関数を使う
  9. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう #phpcon_nagoya Removeだらけの

    PHPUnit 12に備えよう 12 #5473 Remove assertStringNotMatchesFormat() and assertStringNotMatchesFormatFile() • 正規表現に一致しているか 判別するassert関数 • 大人しくPHP標準関数の preg_matchを使う 方針1:PHP標準関数を使う
  10. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう #phpcon_nagoya Removeだらけの

    PHPUnit 12に備えよう 14 方針2:決められたフォーマットや、 思想に従う • $mock->will($this->returnXXX())) という書き方ができなくなる • willメソッドを使わない ◦ $mock->willReturnXXX() #5424 Remove TestCase methods for creating return stub configuration objects
  11. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう #phpcon_nagoya Removeだらけの

    PHPUnit 12に備えよう 15 方針2:決められたフォーマットや、 思想に従う • stubでexpectsが使えなくな る(詳しくはこちら ) • expectsを使うなら stubの代 わりにmockを使う #5536 Remove support for configuring expectations using expects() on test stubs
  12. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう #phpcon_nagoya Removeだらけの

    PHPUnit 12に備えよう 16 方針2:決められたフォーマットや、 思想に従う • アノテーションが使えなくな る(@dataProviderみたい なやつ) • 代わりにAttributeを使う #5541 Remove Support for metadata in doc-comments
  13. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう #phpcon_nagoya Removeだらけの

    PHPUnit 12に備えよう 17 方針2:決められたフォーマットや、 思想に従う • 特定のオプションでカンマ 区切りが使えなくなる • 1つ1つオプションを指定す る #5710 Remove Support for using comma-separated values with the --group, --exclude-group, --covers, --uses, and --test-suffix CLI options
  14. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう #phpcon_nagoya Removeだらけの

    PHPUnit 12に備えよう 18 方針2:決められたフォーマットや、 思想に従う • 非推奨エラーの報告範囲 を制限する設定が消える • 別の設定へ代替する • ignoreSelfDeprecations • ignoreDirectDeprecations • ignoreIndirectDeprecations #5756 Remove Support for the restrictDeprecations attribute on the <source> element of the XML configuration file
  15. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 20 •

    #5314 Remove MockBuilder::getMockForAbstractClass() • #5247 Remove TestCase::getMockForAbstractClass() • #5313 Remove MockBuilder::getMockForTrait() • #5250 Remove TestCase::getObjectForTrait() • #5249 Remove TestCase::getMockForTrait() 抽象(absrtract)クラス / Traitをモック化してくれる。代替案は、 • 抽象クラスを継承したクラス / Traitをuseしたクラスをモック化 • 抽象クラス / Trait単体をモック化しないとテストできないのであれ ば、そもそも抽象クラス / Traitの設計、責務を見直す 方針3:ときには設計を見直す
  16. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 21 •

    #5321 Remove MockBuilder::addMethods() モックに対して未定義のメソッドを追加してくれる。代替案は、 • 該当クラスの __call メソッドに対して、 willReturnCallback を使っ てモック化する • そもそもテスト対象の設計、責務を見直す 方針3:ときには設計を見直す
  17. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 22 •

    #5246 Remove TestCase::createTestProxy() • #5312 Remove MockBuilder::enableProxyingToOriginalMethods(), MockBuilder::disableProxyingToOriginalMethods(), and MockBuilder::setProxyTarget() テストプロキシ:実際のクラスを使いつつ、特定の引数に応じてメソッドを 代わりに実行する仕組み。単なるモック化では、モック元のコードは実行 されないが、テストプロキシだと実行してくれる。 (参考) https://github.com/sebastianbergmann/phpunit-mock-objects/issues/132 方針3:ときには設計を見直す
  18. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 23 無くなってしまったものはしょうがないので、代替案を考える

    • 諦めてテストプロキシの代わりに、モックを使う • テストプロキシが無くても、正攻法でテストできるよう処理を見直す 方針3:ときには設計を見直す
  19. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 25 •

    #5310 Remove MockBuilder::enableAutoload() and MockBuilder::disableAutoload() ◦ autoloadを有効 / 無効化する • #5311 Remove MockBuilder::allowMockingUnknownTypes() and MockBuilder::disallowMockingUnknownTypes() ◦ 未定義のクラスやインターフェースに対してモックを許可 / 非許可する • #5316 Remove MockBuilder::enableArgumentCloning() and MockBuilder::disableArgumentCloning() ◦ モックオブジェクトのクローンを有効 / 無効化する 現実:代替手段はない
  20. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 26 代替手段は残念ながらどれもありません。

    これらのメソッドが必要になった時点で、あまりにも複雑すぎることをテス トしています!大人しく、既存の設計を見直しましょう。 現実:代替手段はない
  21. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 27 •

    #5416 Remove support for doubling interfaces (or classes) that have a method named method ◦ methodって名前のメソッドを持つクラスやインターフェースをサポートから外す ◦ そもそもmethodって名前のメソッドをつけるんじゃない! • #5801 Remove support for targeting traits with #[CoversClass] and #[UsesClass] attributes ◦ カバレッジ対象 /非対象の設定ができる Attributesから、Traitを対象外にする ◦ Traitをuseしている元のクラスに、カバレッジ対象 /非対称の設定を使用 現実:代替手段はない
  22. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 28 •

    #5248 Remove TestCase::getMockFromWsdl() ◦ WSDL (Web Services Description Language) を使用して、 Webサービスのモックを作成できる ◦ 大人しく通常のモック( MockBuilderなど)を使おう • (おまけ) #5978 Drop Support for PHP 8.2 ◦ 歯を食いしばって PHPのバージョンを上げましょう 現実:代替手段はない
  23. #phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう BASE Recruitment

    Information Our Mission Payment to the People, Power to the People. 自分の好きなことを仕事にしたり経済活動を行っている個人やスモールチームのエンパワーメントを目指しています。 29 BASEBANKで一緒に働くメンバーを大募集中! 絶賛募集中!! - Webアプリケーションエンジニア - シニアエンジニア - テックリード - とにかくエンジニア