LoginSignup
32
28

More than 5 years have passed since last update.

[PHP] echo などの標準出力が含まれるメソッドをテストする

Last updated at Posted at 2014-07-08

例えば、テストをしたいコードが下記のようにメソッドを実行した時点で標準出力されるコードを含んでしまっていたとします。

Japan.php
<?php

class Japan{
  public function getCapital(){
    echo '<div id="capital">';
    echo '埼玉県';
    echo '</div>';
  }
}

getCapital() は何も return してくれませんので、代わりに標準出力された内容をテストします。標準出力される内容を取得できる ob_start()ob_get_clean() を使います。これにより、標準出力される内容を変数に格納できますのでテストを行えるようになります。

JapanTest.php
<?php

require_once 'Japan.php';

class JapanTest extends PHPUnit_Framework_TestCase{
  public function testGetCapitalOutputsExpectedHtml(){
    $japan = new Japan();
    ob_start();
    $japan->getCapital();
    $actual = ob_get_clean();
    $expected = '<div id="capital">埼玉県</div>';
    $this->assertEquals($expected, $actual);
  }
}

下記を参考にしました。ありがとうございます。
https://github.com/cakephp/cakephp/blob/3.0-stacktrace/tests/TestCase/BasicsTest.php#L838-L851

32
28
2

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
32
28