модульное тестирование 101 как правильно тестировать модели? - PullRequest
2 голосов
/ 16 марта 2012

У меня большой опыт программирования, и я решил, что в моем следующем проекте я буду использовать модульное тестирование.Я создаю приложение, используя php с CodeIgniter и оракулом в качестве rdbms.Все мои модели имеют в основном только методы, которые работают с базой данных: методы CRUD, ничего особенного.Итак, вопрос в том, как мне проверить это?Стоит ли их тестировать?Потому что, если запрос неправильный, я получу ошибку php, и в основном все мои тесты пройдут, потому что мои запросы верны.На что следует обратить внимание и чего следует ожидать при тестировании моделей?

Например: простой метод:

public function register($username, $password, $email)
{
    $hash = $this->_generate_hash();

    return $this->add(array(
        'username'      => $username,
        'password'      => hash('sha256', $this->config->item('salt') . $password . $hash),
        'email'         => $email,
        'hash'          => $hash
    ));

Если запрос в порядке, эта вставка всегда будет работать, и если я добавлю тестовые параметры вфункция, которую он всегда будет проходить, но тест пройден, потому что SQL в порядке, или как мне проверить это?} `

1 Ответ

2 голосов
/ 16 марта 2012

При тестировании моделей я стараюсь думать о двух вещах: покрытие кода и альтернативные параметры.

Охват кода: Важно попытаться достичь высокого уровня покрытия кода.Это позволяет вам ТОЧНО выяснить, что может случиться в различных ситуациях выполнения и как вы справляетесь с ними.Часто я нахожу области, которые трудно проверить, которые после небольшого обзора приходят к выводу, что способ написания не является оптимальным.Быстрый рефакторинг моего кода обычно приводит к тому, что все выглядит чище, работает лучше, а также становится более тестируемым.

Альтернативные параметры: Вы можете чувствовать полный контроль над данными, отправляемыми вваши функции CRUD, но как они будут справляться с ситуацией, в которой это не то, что вы ожидаете?Вы сказали when the query is wrong I will get a php error но разве вы этого хотите?Не лучше ли ловить эти ошибки, используя обработку исключений, и разбираться с ними на ваших собственных условиях, а не внезапной и немедленной смертью выполнения вашего скрипта? Или, что еще хуже, что-то уязвимо для внедрения SQL-кода, и вы не знали, потому что никогда не создавали тестовый пример?

Это пара вещей, о которых мне лично нравится думать, когда мой модуль тестируетмоделей.

...