PHPUnit - Демпинговые переменные
Я только начал использовать PHPUnit, и мне интересно, есть ли сборка для сброса содержимого переменной?
Предположим, что, поскольку я уже говорю с кодом, который я разрабатываю, я могу использовать PHPUnit не только для проверки стабильности этого кода, но и для вывода информации об отладке во время разработки.
Я знаю, что xdebug может заполнить этот пробел для меня, но иногда просто проще выгружать некоторую информацию на выходе, вместо того, чтобы возиться с моим отладчиком IDE, что более полезно для отслеживания причины ошибки.
Я знаю, что могу просто сделать обычный var_dump, мне просто интересно, имеет ли PHPUnit интерфейс для этого.
Спасибо!
Edit:
Решил взломать его вместе после ответа Дэвида.
Отнюдь не идеальное решение, но оно делает для меня работу. Если кому-то интересно:
*** PHPUnit-3.6.3/PHPUnit/Framework/TestCase.php 2011-11-09 12:25:38.000000000 -0500
--- PHPUnit/Framework/TestCase.php 2011-11-09 15:27:02.193317219 -0500
***************
*** 291,296 ****
--- 291,298 ----
* @var boolean
*/
private $outputBufferingActive = FALSE;
+
+ public static $ob_output = array();
/**
* Constructs a test case with the given name.
***************
*** 913,921 ****
--- 915,927 ----
}
try {
+ ob_start();
$testResult = $method->invokeArgs(
$this, array_merge($this->data, $this->dependencyInput)
);
+
+ Static::$ob_output[ $method->name ] = ob_get_contents();
+ ob_end_clean();
}
catch (Exception $e) {
И для использования с VisualPHPUnit:
*** NSinopoli-VisualPHPUnit-b7ba91a/ui/test.html 2011-11-08 15:38:44.000000000 -0500
--- ui/test.html 2011-11-09 15:38:44.797329455 -0500
***************
*** 3,15 ****
<div class="name" title="Test Status: <?php echo ucfirst($test['status']);?>"><?php echo $test['name'];?></div>
<div class="stats"><?php echo $test['message'];?></div>
<div class="expand button"><?php echo $test['expand'];?></div>
! <div class="more test <?php echo $test['display'];?>">
<div class="variables rounded <?php echo $test['variables_display'];?>">
<pre><?php echo $test['variables_message'];?></pre>
! </div>
<div class="stacktrace rounded <?php echo $test['trace_display'];?>">
<pre><?php echo $test['trace_message'];?></pre>
! </div>
</div>
</div>
<?php if ( $test['separator_display'] ) { ?>
--- 3,21 ----
<div class="name" title="Test Status: <?php echo ucfirst($test['status']);?>"><?php echo $test['name'];?></div>
<div class="stats"><?php echo $test['message'];?></div>
<div class="expand button"><?php echo $test['expand'];?></div>
! <div class="more test <?php echo $test['display'];?>">
<div class="variables rounded <?php echo $test['variables_display'];?>">
<pre><?php echo $test['variables_message'];?></pre>
! </div>
<div class="stacktrace rounded <?php echo $test['trace_display'];?>">
<pre><?php echo $test['trace_message'];?></pre>
! </div>
! <?php if (isset(PHPUnit_Framework_TestCase::$ob_output[$test['name']])) { ?>
! <h3>OB Output</h3>
! <div class="variables rounded">
! <pre><?php echo PHPUnit_Framework_TestCase::$ob_output[$test['name']]; ?></pre>
! </div>
! <?php } ?>
</div>
</div>
<?php if ( $test['separator_display'] ) { ?>
Ответы
Ответ 1
Обновление:
Обратите внимание, что этот ответ относится только к PHPUnit с 3.6.0 по 3.6.3.
Когда выйдет PHPUnit 3.6.4, он больше не будет разрешать вывод по умолчанию.
Оригинальный ответ
Если вы хотите увидеть проглоченный вывод, вы можете использовать phpunit --debug
. Это превратит все предложения вывода и покажет ваши var_dumps.
Пример теста:
<?php
class OutputTest extends PHPUnit_Framework_TestCase {
public function testOutput() {
var_dump("HI!");
$this->assertTrue(true);
}
}
Запуск phpunit outputTest.php
PHPUnit 3.6.2 by Sebastian Bergmann.
.
Time: 0 seconds, Memory: 3.25Mb
OK (1 test, 1 assertion)
Запуск phpunit --debug outputTest.php
PHPUnit 3.6.2 by Sebastian Bergmann.
Starting test 'OutputTest::testOutput'.
.string(3) "HI!"
Time: 0 seconds, Memory: 3.25Mb
OK (1 test, 1 assertion)
Ответ 2
с использованием ob_flush()
будет работать также, например. в вашем тесте
var_dump($foo);
ob_flush();
но обратите внимание, что это также будет очищать любой вывод, сгенерированный PHPUnit.
Ответ 3
Попробуйте print_r() работает для меня в терминале.
Ответ 4
Нет, и на самом деле PHPUnit 3.6 проглотит весь вывод, полученный из теста (возможно, только в строгом режиме).