PHP の単体テストでファイルシステムのモックを使う

単体テストでは外部リソースへのアクセスは行わないのが基本。もちろんファイルシステムも含まれる。テスト対象コード内にある外部リソースへのアクセス処理は、アクセス先を「モック」に差し替えることで対応できる。
なるべく設計レベルでモックへの差し替えしやすくするべきではあるが、標準の関数を呼び出している部分まで対応するのはなかなか難しい。

そんなとき PHPUnit のマニュアルの中に「ファイルシステムのモック」という記事を発見。

vfsStream というライブラリを使うと仮想のファイルやディレクトリに対して、追加・更新・削除を行うことが出来ることが分かった。

PHPUnit のマニュアルの通りにインストールすると vfsStream 0.12.0 がインストールされた。もし最新の vfsStream (>= 1.0) を利用したい場合は、 https://github.com/mikey179/vfsStream/wiki/Install に手順が書かれてあり、Pear ではなく Composer を使うことになる。

vfsStream はストリームなので、単なるファイルのテストだけでなく、ネット上の url をたたくような処理のテストにも利用できそう。

参考:
http://1000g.5qk.jp/2013/03/27/vfsstream-%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/
https://gist.github.com/okinaka/5811348

vfsStream 未対応な関数

把握している中では以下の通り(他にもあるかもしれません)

  • chgrp()
  • chmod()
  • chown()
  • glob()
  • realpath()
  • touch()
  • move_uploaded_file()