16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

vfsStream を使って PHP のファイル書き込み、読み込みをテストする

Last updated at Posted at 2014-03-22

PHP のファイルの読み書きをユニットテストする方法を探していたところ vfsStream という仮想のファイルシステムを提供してくれるツールを見つけました。

例えば下記のようなファイルの内容を1行ずつ読み取って配列に格納するメソッド read をもった Hoge クラスをテストの対象とします。

Hoge.php
<?php

class Hoge{
  public function read($filename){
    $fh = fopen($filename, 'r');
    $terms = array();
    while($term = fgets($fh, 1024)){
      $terms[] = $term;
    }   
    return $terms;
  }
}

そして下記は Hoge クラスの read メソッドを、vfsStream を使ってテストする PHPUnit のテストコードです。なお、vfsStream は composer でインストールしています。

HogeTest.php
<?php

require 'Hoge.php';
require 'vendor/autoload.php';

use org\bovigo\vfs\vfsStream;

class HogeTest extends PHPUnit_Framework_TestCase{
  public function testRead(){

    /** 
     * 仮想のファイルを生成する。
     */
    vfsStream::setup();
    $path = vfsStream::url('root/sample.txt');
    $fh = fopen($path, 'w');
    fwrite($fh, '東京' . PHP_EOL . '埼玉' . PHP_EOL . '大阪' . PHP_EOL);
    fclose($fh);

    /** 
     * 仮想のファイルを使って Hoge クラスの
     * read メソッドが正しく動作するか確かめる。
     */
    $hoge = new Hoge();
    $this->assertEquals(
      array('東京' . PHP_EOL, '埼玉' . PHP_EOL, '大阪' . PHP_EOL),
      $hoge->read($path)
    );  
  }
}

仮想のファイルを作り、任意のテキストを書き込んでおき、それを想定通りに読み込めるかをテストすることができました。書き込みをテストしたい場合はこの手順を逆にして、最初に仮想ファイルに対して書き込みのメソッドを実行して、その仮想ファイルの中身を検証すれば書き込みのテストもできますね。

16
15
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?