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 に答える