У вас в объекте есть несколько методов, которые по идеологии юнит тестирования
нужно/можно протестировать отдельно.
Например:
new - хорошо бы протестировать, что этот метод правильно производит начальную
инициализацию переменных в зависимости от переданныех параметров
set_favicon - проверить, что устанавливается переменная $self->{ico}
listen - проверить, что сервер действительно начинает слушать нужный сокет.
Проверить, что правильно парсятся разные синтаксисы хостов, сервисов. Проверить
поведение сервера в ошибочных ситуациях. Проверить, что сокеты переводятся в
неблокирующий режим. Проверить поведение метода для разных OS. Проверить, что
метод действительно вызывает другой метод prepare.
accept - Проверить, что метод вызывается при коннекте клиента. Проверить
поведение метода, когда $fn == undef. Проверить, что сокет переводится в
неблокирующий режим. А что происходит, если сокет не смог перейти в
неблокирующий режим? Проверить, что метод вызывает incoming с правильными
аргументами, в зависимости от флага $self->{want_peer}
И так далее по каждому методу.
Ведь задача юнит тестов - фиксирование интерфейсов взаимодействия разных частей
программы. И нужно это для того, чтобы программист сразу видел места, поведение
которых изменилось после последнего коммита.
> Модуль здесь - AE::HTTP::Server.
> тесты проверяют, что этот модуль функционирует корректно.
Ваши тесты проверяют, что модуль в целом функционирует. Относительно всей
программы, в которой используется модуль тесты можно назвать юнит-тестами, а
вот относительно вашего модуля я назвал ваши тесты функциональными, т.к. вы
поставляете только этот модуль...
Или я о каком-то другом виде тестирования говорю?
Кстати, интересно будет услышать в докладе темы:
1) Виды тестирования (в качестве введения в тему)
2) Зачем нужны тесты
3) Нужно ли тестировать поведение модуля в ситуациях возникновения ошибок
4) До какой степени нужно покрывать тестами код программы.
5) Как юнит-тесты помогают в командной разработке
6) Как юнит-тесты помогают при рефакторинге кода.
7) Как сильно TDD замедляет разработку
С почтением,
Илья Винокуров
Среда, 22 января 2014, 13:54 +04:00 от Mons Anderson <[email protected]>:
>
>On 21.01.2014, at 23:18, Илья Винокуров < [email protected] > wrote:
>
>>
>> Да запросто!
>>
>> Вон у Монса в AnyEvent::HTTP::Server II присутствуют только функциональные
>> тесты, а UNIT тестов нет. Вот давайте и заслушаем доклад, который покажет
>> как писать UNIT тесты для AE. Надеюсь, что в докладе будет подробно
>> расписана техника AE Mock'ов
>
>А что вы подразмеваете под unit-тестами?
>
>
>> Модульное тестирование, или юнит-тестирование (англ. unit testing) — процесс
>> в программировании, позволяющий проверить на корректность отдельные модули
>> исходного кода программы.
>> Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или
>> метода. Это позволяет достаточно быстро проверить, не привело ли очередное
>> изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных
>> местах программы, а также облегчает обнаружение и устранение таких ошибок.
>
>Модуль здесь - AE::HTTP::Server.
>тесты проверяют, что этот модуль функционирует корректно.
>
>>
>> PS: Лично мне этот вопрос очень интересен, если у кого есть ссылки на
>> хорошие методики, поделитесь пожалуйста...
>>
>> ЗЫ: У меня был опыт покрытия UNIT тестами POE клиента. Тесты для POE
>> писались довольно легко, так как у POE все кишки наружу и в тестах можно
>> было оттрасировать все вызовы колбеков и все аргументы функций. А вот к
>> AnyEvent пока не понятно с какого бока подлезть - у него же все на
>> замыканиях зиждется…
>>
>
>Есть много способов сделать что-нибудь, но опишите, пожалуйста, цель.
>
>
>--
>Moscow.pm mailing list
>[email protected] | http://moscow.pm.org
--
Илья Винокуров
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org