Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

#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にリリース🎉

Slide 4

Slide 4 text

#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 /blob/12.0/ChangeLog-12.0.md#removed

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

#phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう © 2012-2025 BASE, Inc. 6 時間内に全部解説 できますか? 6

Slide 7

Slide 7 text

#phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう © 2012-2025 BASE, Inc. 7 できらあっ!!!! 7

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

#phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 9 方針1:PHP標準関数を使う

Slide 10

Slide 10 text

#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標準関数を使う

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

#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標準関数を使う

Slide 13

Slide 13 text

#phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 13 方針2:決められたフォーマットや、 思想に従う

Slide 14

Slide 14 text

#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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

#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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

#phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 19 方針3:ときには設計を見直す

Slide 20

Slide 20 text

#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:ときには設計を見直す

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

#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:ときには設計を見直す

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

#phpcon_nagoya © 2012-2025 BASE, Inc. Removeだらけの PHPUnit 12に備えよう 24 現実:代替手段はない

Slide 25

Slide 25 text

#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() ○ モックオブジェクトのクローンを有効 / 無効化する 現実:代替手段はない

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

#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している元のクラスに、カバレッジ対象/非対称の設定を使用 現実:代替手段はない

Slide 28

Slide 28 text

#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のバージョンを上げましょう 現実:代替手段はない

Slide 29

Slide 29 text

#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アプリケーションエンジニア - シニアエンジニア - テックリード - とにかくエンジニア