PHPUnit の setMethods の代わりに使うメソッド
概要
PHPUnit でモックを作成する際に、、モック対象となるメソッドを指定する際にsetMethods
を使っていると、これは現在非推奨とのことで代わりのメソッドを調べました。PHPStorm が教えてくれました… ありがとうございます🙏🏼
代わりのメソッド
setMethods
は今後削除されるので代わりには以下のどちらかを使うそうです。
onlyMethods
:すでに存在するメソッドをモックする場合addMethods
:まだ存在しないメソッドをモックする場合
どちらがよいのか
基本的にはonlyMethods
にしておくとモック対象のメソッドがなくなった場合は以下のようなエラー文と共にテストを失敗させてくれるのでテストは通ってるけどそのメソッド実は消されてた!みたいなことがなくて良さそうです。
Trying to set mock method "execute" with onlyMethods, but it does not exist in class "<モック対象のクラス名>". Use addMethods() for methods that do not exist in the class <テストのクラス名>
逆に存在するメソッドに対してaddMethods
を指定すると、それすでにあるからonlyMethods
を使ってや!とテストを失敗させてくれました。
テスト作成時に存在してなかったメソッドが後で作成された場合も気づけるようになっていて親切ですね。
参考
PHPUnit 9時代のTest Doubleの作り方 / deep dive into mockbuilder of phpunit 9 - Speaker Deck