⛳
PHPのテストでモック処理を調べた雑感
結論
モックしづらい。
PHPは、型が適当な言語のくせに、処理の入れ替えであるモックはしづらいという。。。
型がある言語並みにお堅い一方で、型が無い言語ほどには柔軟性がない。
そんな印象でした。
Laravelを使っているなら、基本的にDIで行くのが良いかと。
自分の実装方針としては、Rich Hickeyのシンプルさの必要性という記事を体現したいと思っている。
なので、出来うる限り普通の関数で作っていき、モックが必要な部分だけDIで置き換える形かな?と思った。
例を上げると
staticメソッドの置き換え。
self::hoge
で書くと置き換えできないので、static::hoge
と書くと良いなどがある。
遅延静的束縛 (Late Static Bindings)
上記が関係しているらしいが、マニアックすぎないか?と思ったりした。
詳しくは、phakeというMockライブラリのドキュメント参照
ひとこと
traitで全体的に適用しているメソッドの動作を変えたかったのですが、インスタンスを作成した後では置き換えできないはずで、なんとかならんかなぁと調べていた形です。
上記は、結局フラグで対応したのですが、テストのための動作変更にモック化ができず、プロダクションコードの変更が伴うのは、なんかなぁと思った次第です。
(もしかしたら、見つけられてないだけで、良い案があるのかもしれないですが。。。)
あと、後からテスト入れ込むと大抵テストしづらいコードになるので、最初から入れておきたいところですね。。。
Discussion