1

我开始编写 phpUnit 测试并面临这样的问题。我 80% 的函数都以这样的行结尾

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

我怎样才能在我的课堂上对这类功能进行测试?

4

1 回答 1

3

您需要将代码隔离为可测试的“块”。您可以测试该函数在给定指定文本的情况下返回 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 页面的情况下获得预期的数据。

于 2013-03-27T20:00:29.833 回答