PHP用モッキングフレームワーク『Mockery』を使ってみた

PHP用モッキングフレームワーク『Mockery』を使ってみた

私は主にPHPで開発を行っており、ユニットテストも書いています。
クラスのスタティックメソッドをモック化する必要に迫られたのですが、そこでたどり着いたのが『Mockery』の存在。
<参照:GitHub『Mockery』>

GitHub内に記載されたドキュメントを見る限りでは、スタティックメソッドのモック化もできるとのこと。
まさに私の現在のニーズにピッタリ! ……ということで、さっそく使ってみることにしました。

『Mockery』の良さそうなところ

使う前ではありますが、『Mockery』の期待できそうな点が以下の通り。

  • スタティックメソッドがモック化できる(今回の最大の目的!)
  • テスト対象のメソッド内でnewされるクラスもモックにできる
  • シンプルな記述で簡単に使えそう(何気に重要!)

期待値ばかりが異様に高まってしまいましたが、さっそくインストールしてみましょう。

インストール方法はいくつかあるようですが、Composerでさくっと実行しちゃいましょう。
「composer.json」に下記を追加し、「composer update」でインストール。

※「PHPUnit」は既にインストール済みの環境

あとは、テストファイルでRequireするなり、ComposerのAutoloadを使うなりして読み込んでしまえば準備完了です。

さっそく『Mockery』を使ってみた

今回の目的である、クラスメソッド中の「MathClass」のスタティックメソッドでインスタンスを取得しています。
さっそくこれをモック化するテストコードを書いてみましょう。

下記のテストコードでモック化できて、テストも通りました!

思いの外、カンタンにできてしまいました。
では、ついでにPHP組み込み関数のdate関数を利用したクラスもテストしてみましょう。

これはちょっとひねりが必要でしたね。
このような組み込み関数をモック化する場合は、現在の名前空間で組み込み関数名と同名の関数を定義してから上書きすることで、モックと置き換えることができるようです。
なお、名前空間が設定されていない場合は、この方法は使えませんでした……。

『Mockery』を使ってみた感想

『Mockery』には他にも便利な機能を備えているようです。
一部のメソッドをモック化するパーシャルモック機能、引数のバリデート等、ユニットテストを行うための便利機能……などなど。
とても使いやすいモッキングフレームワークですね。

私と同じニーズでお悩みの方はもちろんのこと、今後役立ちそうと感じた方は、ぜひお試しくださいね!

コメント