私はphpunitテストでecho
を試してきましたが、今のところ運がありません。
Xml構成ファイルに関するドキュメントを読みましたが、どうやらdebug
パラメーターが私が探しているものです。残念ながら、それでも機能しません。とにかくここに私のxml設定ファイルがあります:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true"
processIsolation="true"
verbose="true"
debug="true">
</phpunit>
processIsolation
とverbose
の両方が受け入れられますが、debug
は受け入れられません。
このコマンドをphpunitに直接渡すと、実際にはかなりうまく機能します。
phpunit --debug MyTest.php # here stuff is echoed correctly
しかし、xml設定ファイルでは、無視されているように見えます。
PHPUnitの現在のバージョン>3.6.4
(およびすべての3.5.*
バージョン)は、テストケースでecho
したものすべてを出力するだけです。
<?php
class OutputTestCase extends PHPUnit_Framework_TestCase {
public function testEcho() {
echo "Hi";
}
}
生成:
phpunit foo.php
PHPUnit 3.6.7 by Sebastian Bergmann.
.Hi
Time: 0 seconds, Memory: 3.25Mb
OK (1 test, 0 assertions)
だからあなたが古い3.6
バージョンはアップグレードするだけです:)
Exit()またはkill()を呼び出さないように注意してください。 PHPUnitはechoステートメントをバッファリングし、テスト中にスクリプトが終了すると、そのバッファは出力なしで失われます。
processIsolation
はテストの出力を抑制しているため、無効にする必要があります。 debug
フラグとの相互作用は、おそらくこれで導入された見落としでした: https://github.com/sebastianbergmann/phpunit/pull/1489
テストに時間がかかり、プロセス中に出力を確認したい場合は、次のメソッドをテストクラスに追加します。
_protected function prontoPrint($whatever = 'I am printed!')
{
// if output buffer has not started yet
if (ob_get_level() == 0) {
// current buffer existence
$hasBuffer = false;
// start the buffer
ob_start();
} else {
// current buffer existence
$hasBuffer = true;
}
// echo to output
echo $whatever;
// flush current buffer to output stream
ob_flush();
flush();
ob_end_flush();
// if there were a buffer before this method was called
// in my version of PHPUNIT it has its own buffer running
if ($hasBuffer) {
// start the output buffer again
ob_start();
}
}
_
これで、テストクラス内で$this->prontoPrint($variable)
を呼び出すと、すぐにコンソールにテキストが表示されます。私はこれを使用しました php.netコメント 関数を記述しました。
_PHPUnit 5.7.21
_ _PHP 5.6.31 with Xdebug 2.5.5
_