PHPUnit для интеграционных тестов командной строки - PullRequest
2 голосов
/ 14 апреля 2009

Недавно я начал работать над функцией Email2SMS в нашем продукте. Когда я присоединился к проекту, этот компонент имел нулевое покрытие кода юнит-тестами. Устаревший код.

С тех пор, как я начал работать над этим, я использовал тестовый подход. Но качество кода было очень низким. Было очень сложно разделить его и протестировать небольшие блоки по юнит-тестам, поэтому я решил написать интеграционный тест.

Есть скрипт php, который принимает некоторую информацию о сообщении, ищет пользователя в БД и сохраняет некоторую информацию, если все в порядке.

$last_line = system('php emailtosms.php -file=unicode_message.txt ', $retval);

$this->assertStringExistsInLogFile('Email to SMS message was not sent');

Это плохо или нет? Как бы вы решили эту проблему?

1 Ответ

3 голосов
/ 14 апреля 2009

Не очень хорошо.

Выполните тестирование на более низком уровне, используя скрипт emailtosms.php в качестве простой оболочки, которая обрабатывает аргументы командной строки и затем передается в более тестируемый класс. В зависимости от последнего шага, вы можете написать модульные тесты, которые будут выполнять почти все, кроме финальной отправки (возможно, имитировать последний шаг, который фактически отправляет его, и просто сохранить его в переменной, а затем проверить, что у вас есть что-то допустимое).

Финальная интеграция запускает полный класс полностью и проверяет его вывод, просматривая окончательный журнал - или немного более высокий уровень, что будет помещено в журнал.

...