2013-03-27 5 views
0

Я начинаю писать тест phpUnit и сталкиваюсь с такой проблемой. 80% моих функций, заканчивающихся на таких линияхPhpUnit проверить выходной текст

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

Как я могу сделать тест на такие функции в своих классах?

+0

Есть ли причина, по которой вы просто печатаете и не возвращаете значение? – Uby

+0

Ofc, я делаю ответ AJAX таким образом. –

+0

Но почему бы не просто вернуть значение, а затем распечатать? Что-то вроде 'echo myFunction()' вместо того, чтобы просто называть 'myFunction()'? – Uby

ответ

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-странице.