How to output in CLI during execution of PHP Unit tests?
UPDATE
Just realized another way to do this that works much better than the --verbose
command line option:
class TestSomething extends PHPUnit_Framework_TestCase { function testSomething() { $myDebugVar = array(1, 2, 3); fwrite(STDERR, print_r($myDebugVar, TRUE)); }}
This lets you dump anything to your console at any time without all the unwanted output that comes along with the --verbose
CLI option.
As other answers have noted, it's best to test output using the built-in methods like:
$this->expectOutputString('foo');
However, sometimes it's helpful to be naughty and see one-off/temporary debugging output from within your test cases. There is no need for the var_dump
hack/workaround, though. This can easily be accomplished by setting the --verbose
command line option when running your test suite. For example:
$ phpunit --verbose -c phpunit.xml
This will display output from inside your test methods when running in the CLI environment.
Update: See rdlowrey's update below regarding the use of fwrite(STDERR, print_r($myDebugVar, TRUE));
as a much simpler work around
This behaviour is intentional (as jasonbar has pointed out). The conflicting state of the manual has been reported to PHPUnit.
A work-around is to have PHPUnit assert the expected output is empty (when infact there is output) which will trigger the unexpected output to be shown.
class theTest extends PHPUnit_Framework_TestCase{ /** * @outputBuffering disabled */ public function testOutput() { $this->expectOutputString(''); // tell PHPUnit to expect '' as output print_r("Hello World"); print "Ping"; echo "Pong"; $out = "Foo"; var_dump($out); } }
gives:
PHPUnit @package_version@ by Sebastian Bergmann.FTime: 1 second, Memory: 3.50MbThere was 1 failure:1) theTest::testOutputFailed asserting that two strings are equal.--- Expected+++ Actual@@ @@-''+'Hello WorldPingPongstring(4) "Foo"+'FAILURES!Tests: 1, Assertions: 1, Failures: 1.
Be certain to disable any other assertions you have for the test as they may fail before the output assertion is tested (and hence you wont see the output).
Try using --debug
Useful if you're trying to get the right path to an include or source data file.