darudaru

だるだるしてるエンジニア

PHPUnitでechoやprintなどの出力処理をテストする

テストしたいコードにechoやprintなどの出力処理がある場合、PHPUnitでどうやってテストコード書いたらいいんだろう?って調べたのでまとめておく。

テストしたいコード

<?php
class Hoge
{
    public function display()
    {
        echo 'ホゲホゲ';
    }
}

display()でechoでホゲホゲという文字列を出力しています。

PHPUnitのテストコード

<?php

class HogeTest extends \PHPUnit_Framework_TestCase
{
    public function testDisplay()
    {
        $hoge = new Hoge();
        $this->expectOutputString("ホゲホゲ");
        $hoge->display();
    }
}

expectOutputString()で出力される想定の文字列を設定した後に、実際に出力する処理であるdisplay()を呼び出します。

ちなみに、expectOutputString以外にもPHPUnitには出力をテストするために下記メソッドが用意されています。

  • expectOutputRegex 想定される出力内容を正規表現で設定します
  • setOutputCallback 想定される出力に使用されるコールバック関数を設定します。