2012-09-12 33 views
0

下面是我原創的PHP代碼代碼:如何驗證此函數是PHPUnit中的字符串?

public function outputText() { 
    $i = 1; 
    foreach($this->sorted_data as $this->data) { 
     echo "$i. ".$this->data[0]."<br/>"; 
     $i++; 
    } 
} 

而這裏的PHPUnit的代碼:

public function testVerify() { 
    $yn = new SortThisData(); 
    $yn->readFile("input.txt"); 
    $output = $yn->outputText(); 
    $this->assertTrue(is_string($output)); 

    //if(!is_string($yn->get())) 
    // return false; 
    //$this->assertNotEmpty($yn->get()); 
    } 

類是在原有的PHP文件名爲SortThisData。 當我使用gettype()時,它說它是空的。我試圖驗證它是一個字符串,因此它可以通過PHPUnit。有什麼辦法可以做到這一點?

回答

3

您正在尋找assertInternalType()

更新:我沒有意識到你在迴應輸出。您可能需要使用output buffering來捕獲文本。

public function testVerify() { 
    $yn = new SortThisData(); 
    $yn->readFile("input.txt"); 

    // start output buffering and capture the output 
    ob_start(); 
    $yn->outputText(); 
    $output = ob_get_clean(); 

    $this->assertInternalType('string', $output); 
} 
+0

它說: 有1次失敗: 1)SortThisDataTest :: testVerify 無法斷言空的類型是 「字符串」 的。 – yan

+0

@RaymondYan我更新了我的答案,看看是否有幫助。 –

+0

感謝它的工作,但你能解釋什麼ob_start();和ob_get_clean();和緩衝區呢?我是編程和PHP/PHPUnit的新手,並且我沒有真正從PHP獲取手冊。 – yan

1

與貝勒的答案沒有不同意見。要回答這個問題,因爲問,那你必須也足夠好:

$this->assertTrue(is_string($output)); 

或者你可以這樣做:

$this->assertEquals('string',gettype($output)); 

(後者的優點是,當出現故障時,它會也告訴你的$output類型; assertTrue只會告訴你的東西失敗)

assertInternalType()正是這麼做的,但只在PHPUnit的3.5引入的,你仍然會發現PHPUnit的3.4在使用中的一些機器。

+0

它沒有工作。它說$輸出爲空 – yan

+0

它_did_工作;它表示$輸出爲空;-)「$ output」爲空的事實是錯誤(正如Baylor已經解釋的那樣)。你的outputText()函數返回null(隱式 - 你沒有return語句)。因此,要麼使用輸出緩衝,要麼重構你的outputText()來創建並返回一個字符串。 –

相關問題