2014-10-03 23 views
2

我剛開始使用PHPUnit進行一些測試,並且無法檢測輸出。
$ this-> hasOutput()返回false,即使我回顯數據。我究竟做錯了什麼?任何幫助,將不勝感激!PHPUnit - hasOutput()不工作

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) 

回答

0

這裏是我的版本的PHPUnit爲hasOutput源(34年7月3日這樣你可能會有所不同;如果這樣做我以下結論可能不適用於您的具體情況):

/** 
* @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文檔中找到它。基於某些grepping,它看起來像是在嚴格模式開始投訴時使用,如果測試已完成並且輸出未明確預期。

如果您需要根據測試是否有任何輸出,在測試中有條件地執行某些操作,那麼您應該可以使用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

謝謝! 我試圖使用這個函數來查看我的代碼是否正在輸出任何數據(即確保它正在回顯某些輸出) - 但hasOutput實際上用於確定測試是否輸出數據...是有意義的。 – 2014-10-06 20:53:25