ひでメモ

プログラムについて勉強したことを書きます。たぶん。

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