PHPUnit — hasOutput () не работает

Я только начал использовать PHPUnit для некоторого тестирования, и у меня возникают проблемы с обнаружением вывода.
$ this-> hasOutput () возвращает false, даже если я отображаю данные. Что я делаю неправильно? Любая помощь будет оценена!

class DatabaseTest extends PHPUnit_Framework_TestCase
{
public function testOutput() {
SampleDB::echoOutput();
$result = $this->hasOutput() ? "true" : 'false';
echo $result;
}
. . .

Реализация:

class SampleDB {
public static function echoOutput(){
echo "hello world!";
}

Запуск тестов:

phpunit DatabaseTest
PHPUnit 4.2.6 by Sebastian Bergmann.

.hello world!false.

Time: 55 ms, Memory: 1.75Mb

OK (2 tests, 0 assertions)

2

Решение

Вот источник для hasOutput из моей версии PHPUnit (3.7.34, так что ваша может отличаться; если это так, мои выводы ниже могут быть неприменимы к вашему конкретному сценарию):

/**
* @return boolean
* @since  Method available since Release 3.6.0
*/
public function hasOutput()
{
if (strlen($this->output) === 0) {
return FALSE;
}

if ($this->outputExpectedString !== NULL ||
$this->outputExpectedRegex  !== NULL ||
$this->hasPerformedExpectationsOnOutput) {
return FALSE;
}

return TRUE;
}

output переменная-член в тестовом примере заполняется только после выполнения теста (включая tearDown) завершен, поэтому он всегда будет пустым во время выполнения теста и, следовательно, hasOutput всегда будет возвращать false.

Я не уверен, что предполагаемое использование hasOutput потому что я не могу найти его в документации по PHPUnit. На основании некоторого опровержения похоже, что оно используется, когда строгий режим включен, чтобы пожаловаться, если тест завершен и имеет вывод, который явно не ожидался.

Если вам нужно сделать что-то условно в своем тесте, основываясь на том, есть ли какие-либо результаты теста, вы должны быть в состоянии использовать getActualOutput() (опять же, это 3.7.x версия функции; возможно, она изменилась в 4), которая вернет текущую буферизованную выходную строку.

Вы также можете использовать такие утверждения, как expectOutputString(),

например

    public function testOutput() {
SampleDB::echoOutput();
$result = ($this->getActualOutput() != '') ? "true" : 'false';
$this->expectOutputString('hello world!');
echo $result;
}

В этом случае утверждение не будет выполнено, потому что фактический результат теста 'helloworld!true'

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]