2013-03-27 57 views
0

我開始寫phpUnit測試並面臨這樣的問題。我的80%功能以這樣的行結束PhpUnit檢查輸出文本

$data["res"] = $this->get_some_html($this->some_id); 
    echo my_json_encode($data); 
    return true; 

我該如何在我的類中對這類函數進行測試?

+0

是否有一個原因,你只是打印並沒有返回值? – Uby 2013-03-27 16:36:03

+0

Ofc,我以這種方式做AJAX響應。 – 2013-03-27 16:38:47

+0

但是,爲什麼不只是返回值,然後打印?像'echo myFunction()'而不是隻調用'myFunction()'? – Uby 2013-03-27 16:41:08

回答

2

您需要將您的代碼隔離爲可測試的「塊」。您可以測試該函數在給定指定文本的情況下返回TRUE/FALSE,然後測試給定固定信息的JSON返回數據。

function my_json_encode($data) 
{ 
    return ...; 
} 

function get_some_html($element) 
{ 
    return ...; 
} 

function element_exists($element) 
{ 
    return ..; 
} 

function display_data($element) 
{ 
    if(element_exists($element) 
    { 
     $data = get_some_html($element); 
     $json = my_json_encode($data); 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
}  

測試:

public function test_my_json_encode() 
{ 
    $this->assertEquals($expected_encoded_data, my_json_encode($text)); 
} 

public function test_get_some_html() 
{ 
    $this->assertEquals($expected_html, get_some_html('ExistingElementId')); 
} 

public function test_element_exists() 
{ 
    $this->assertTrue(element_exists('ExistingElementId'); 
    $this->assertFalse(element_exists('NonExistingElementId'); 
} 

function test_display_data() 
{ 
    $this->assertTrue(display_data('ExistingElementId')); 
    $this->assertFalse(element_exists('NonExistingElementId'); 
}  

這其中的變化和測試一個簡單的,抽象的例子。正如上面的評論所指出的,你可能想要將返回值改爲JSON文本,出錯時爲FALSE,然後在代碼中使用===測試來決定是否顯示文本。

下一步將是模擬元素,以便您可以獲得預期的數據而不需要真正的HTML頁面。