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