ビジネスとIT活用に役立つブログBlog


実ファイルを使わずにPHPのファイル操作テストをかいてみた

この記事をシェアする:

ファイル操作クラスのテストをかく際、どのような方法を思いつくでしょうか?

  • テスト開始時にテスト用ファイルを作成し、テスト終了時に削除する
  • 実際の本番用ファイルでテストを行い、テスト終了時に初期化する

私も上記の方法でテストをかいていましたが、いくつかデメリットがあります。
そのため、今回は仮想ファイルシステムでテストをかいてみようと思います。

筆者の環境
  • CentOS 7
  • PHP 7.3.4

ファイル操作のクラス

まずはテストを行うクラスをかいていきます。
カウンターファイルからカウントを取得しカウントアップするクラスです。 お問い合わせフォームの「お問い合わせNo」の発行に使う想定です。

実ファイルを使ったテストのメリットデメリット

テストをかく前に実ファイルを使ったテストのメリットデメリットについて触れておきます。

メリット

  • テスト用にライブラリをインストールする必要がない

デメリット

  • 実際の本番用ファイルをテストで編集することは好ましくない
  • テスト内容に応じてファイルを作成しなければならない
  • 共同開発の場合、すべての環境にテスト用ファイルを作成しなければならない
  • テスト上で実ファイルの作成、削除を行うことで予期せぬファイルを消してしまう可能性がある

実ファイルを使わないテスト

仮想ファイルシステムを使ったテストをかいていきます。 今回はPHPのテスティングフレームワークのPHPUnitと仮想ファイルシステムを提供してくれるライブラリのvfsStreamを使います。

PHPUnitとvfsStreamはcomposerでインストールします。
※今回は仮想ファイルシステムでのテストが本題ですのでcomposerのインストールに関しては省略します。公式ドキュメント等に記載されていますのでインストールして下さい。

PHPUnitとvfsStreamのインストール

composer.jsonを記述します。

composerでインストールします

vfsStreamの動作テスト

まずvfsStreamで仮想ファイルが生成できているかのテストをしてみます。 vfsStreamのhasChildメソッドはファイルの有無をboolean型で返してくれます。

仮想ファイルがちゃんと作成されていることが確認できました。

Counterクラスのテスト

本題のCounterクラスのテストをかいていきます。テストの内容は以下になります。

  • ファイルが存在していない場合
  • ファイルの読み込み権限がない場合
  • カウンタファイルの数字が取得できるかどうか
  • ファイルの書き込み権限がない場合
  • カウントアップができるか
問題なくテストが通りました!

おわりに

vfsStreamには、今回使用した仮想ファイルの作成以外にもディレクトリや階層構造の作成、実ファイルの階層構造をまるっと仮想ファイルシステムに生成等もできるようです。
詳しくはGitHubのvfsStreamのWikiに載っています。

The following two tabs change content below.
アーティス

アーティス

創造性を最大限に発揮するとともに、インターネットに代表されるITを活用し、みんなの生活が便利で、豊かで、楽しいものになるようなサービスやコンテンツを考え、創り出し提供しています。
この記事のカテゴリ:

SNSで最新の情報を
受け取ることができます!