Как добиться покрытия кода для If / Else в PHPUnit? - PullRequest
2 голосов
/ 20 февраля 2012

Отказ от ответственности: я новичок в модульном тестировании и просто намочил ноги. При этом я понимаю, что 100% не всегда возможно, но мне любопытно, есть ли решение для покрытия кода с помощью операторов if / else, таких как this, или если они просто непроверяемы .

Функция:

public function getAll() 
{

    // Query table for all rows sorted by name
    $select = $this->select();
    $select->order('name ASC');
    $rowset = $this->fetchAll($select);

    // Validate and return row
    if($rowset->current())
    {   
        // Return rowset
        return $rowset;
    }
    else { return false; }

}

Юнит тест

public function testCanGetAll()
{
    // Try to get all states
    $result = $this->model->getAll();
    $this->assertNotNull($result);
    $this->assertNotEquals(false,$result);
}

Результат

enter image description here

Как видите, я не могу закрыть строку return false;. Единственный способ проверить это - переименовать таблицу базы данных или что-то в этом роде.

Есть ли другой способ написания функций с помощью операторов if / else (что является довольно распространенной практикой), позволяющий упростить покрытие кода?

[EDIT] Возможно, лучше не проверять результаты в функции, а просто вернуть ее? Какие бы вызовы ни выполняла эта функция, она выполняет собственную проверку?

public function getAll() 
{

    // Query table for all rows sorted by name
    $select = $this->select();
    $select->order('name ASC');
    $rowset = $this->fetchAll($select);

    // Return rowset whether valid or not
    return $rowset; 

}

1 Ответ

4 голосов
/ 20 февраля 2012

Создайте контекст БД, в котором результат не будет возвращать никаких строк, затем в вашем втором методе теста создайте строку в этом контексте БД.

Обычно не рекомендуется проверять базу данных вашего реального приложения

вы должны клонировать его для своих тестов, чтобы вы могли манипулировать данными, чтобы проверить, как приложение будет реагировать на различные контексты данных.

- EDIT ----

Может помочь следующее руководство: http://framework.zend.com/manual/ru/zend.test.phpunit.db.html

...