0
我開始寫phpUnit測試並面臨這樣的問題。我的80%功能以這樣的行結束PhpUnit檢查輸出文本
$data["res"] = $this->get_some_html($this->some_id);
echo my_json_encode($data);
return true;
我該如何在我的類中對這類函數進行測試?
我開始寫phpUnit測試並面臨這樣的問題。我的80%功能以這樣的行結束PhpUnit檢查輸出文本
$data["res"] = $this->get_some_html($this->some_id);
echo my_json_encode($data);
return true;
我該如何在我的類中對這類函數進行測試?
您需要將您的代碼隔離爲可測試的「塊」。您可以測試該函數在給定指定文本的情況下返回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頁面。
是否有一個原因,你只是打印並沒有返回值? – Uby 2013-03-27 16:36:03
Ofc,我以這種方式做AJAX響應。 – 2013-03-27 16:38:47
但是,爲什麼不只是返回值,然後打印?像'echo myFunction()'而不是隻調用'myFunction()'? – Uby 2013-03-27 16:41:08