December 30th, 2010

Perl: Нефункциональное модульное тестирование - "главное чтобы блестел"

Про модульные тесты писалось наверно не мало, но уверен что не многие их реально пишут. Начать писать тесты бывает сложно чисто психологически, поэтому я предлагаю начать с малого - просто запустить готовые тесты. В этой заметке я бы хотел рассказать не о тестировании функционала самих модулей (это в следующие раз), а об инфраструктуре тестирования и о тестах которые говорят: "незнаю работает ли этот код, но выглядит неплохо".
Такие тесты нужно подготовить один раз и потом использовать во всех проектах т.е они не требуют усилий по разработке, но при это дают вам неплохое представление о состоянии вашего кода.
Итак, перед вами встала задача разработать программу с неким функционалом, большая часть кода у вас скорее всего будет вынесена в модули. Для создания заготовки модуля используем созданную для CPAN автором утилиту module-starter (ставиться с модулем Module::Starter)
выполняем:
module-starter --mi --module=Module::Name --author="worldmind" --email="world.mind@yahoo.com"
в результате будет создана папка Module-Name со следующей структурой

|-- Changes
|-- MANIFEST
|-- Makefile.PL
|-- README
|-- ignore.txt
|-- lib
| `-- Module
| `-- Name.pm
`-- t
|-- 00-load.t
|-- boilerplate.t
|-- manifest.t
|-- pod-coverage.t
`-- pod.t

папка lib это наш модуль, в папке t заготовлены простенькие тесты (с boilerplate.t я не разбирался, незнаю что он творит), для их выполнения нужно
1. выполнить perl Makefile.PL - будет создан Makefile (можно потом и make выполнить, но нам сейчас это неважно)
2. выполнить make test - будут запущены тесты
Результат тестирования выводится в формате TAP (Test Anything Protocol), после выполнения это команды вы увидите примерно следущее

t/00-load.t ....... 1/1 # Testing Module::Name 0.01, Perl 5.010001, /usr/bin/perl
t/00-load.t ....... ok
t/boilerplate.t ... ok
t/manifest.t ...... skipped: Author tests not required for installation
t/pod-coverage.t .. ok
t/pod.t ........... ok
All tests successful.
Files=5, Tests=6, 1 wallclock secs ( 0.10 usr 0.04 sys + 0.45 cusr 0.12 csys = 0.71 CPU)
Result: PASS

Все тесты успешно пройдены, один пропущен т.к. предназначен только для CPAN авторов

Теперь мы немного изменим и дополним набор тестов:

Collapse )