私は主にPHPで開発を行っており、ユニットテストも書いています。
クラスのスタティックメソッドをモック化する必要に迫られたのですが、そこでたどり着いたのが『Mockery』の存在。
<参照:GitHub『Mockery』>
GitHub内に記載されたドキュメントを見る限りでは、スタティックメソッドのモック化もできるとのこと。
まさに私の現在のニーズにピッタリ! ……ということで、さっそく使ってみることにしました。
『Mockery』の良さそうなところ
使う前ではありますが、『Mockery』の期待できそうな点が以下の通り。
- スタティックメソッドがモック化できる(今回の最大の目的!)
- テスト対象のメソッド内でnewされるクラスもモックにできる
- シンプルな記述で簡単に使えそう(何気に重要!)
期待値ばかりが異様に高まってしまいましたが、さっそくインストールしてみましょう。
インストール方法はいくつかあるようですが、Composerでさくっと実行しちゃいましょう。
「composer.json」に下記を追加し、「composer update」でインストール。
1 2 3 |
"require-dev": { "mockery/mockery": "dev-master" } |
※「PHPUnit」は既にインストール済みの環境
あとは、テストファイルでRequireするなり、ComposerのAutoloadを使うなりして読み込んでしまえば準備完了です。
さっそく『Mockery』を使ってみた
今回の目的である、クラスメソッド中の「MathClass」のスタティックメソッドでインスタンスを取得しています。
さっそくこれをモック化するテストコードを書いてみましょう。
1 2 3 4 5 6 7 8 |
class Hoge { public function add($x, $y) { $math = MathClass::getInstance(); return $math->add($x, $y); } } |