我在开始编写phpUnit测试时遇到了这样的问题。80%的函数以
这样的行结束 $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页面的情况下获得预期的数据。