On 22.01.2014, at 15:21, Илья Винокуров <[email protected]> wrote:

> 
> У вас в объекте есть несколько методов, которые по идеологии юнит 
> тестирования нужно/можно протестировать отдельно.
> Например: 
> new - хорошо бы протестировать, что этот метод правильно производит начальную 
> инициализацию переменных в зависимости от переданныех параметров

на такой бред я не буду тратить время.

> set_favicon - проверить, что устанавливается переменная $self->{ico}

а если я решу переписать механизм? проверять нужно, что после set_favicon 
запрос на /favicon возвращает то, что нужно (т.е. опять-же - функционал)

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

зачем?
проверять вызов fh_nonblocking $fh, 1;?
может быть начнём еще проверять, что вызов print "hello world" отрабатывает как 
нужно?

> Проверить поведение метода для разных OS.

> Проверить, что метод действительно вызывает другой метод prepare.

там код линейный. как он может его не вызывать?

> accept - Проверить, что метод вызывается при коннекте клиента.
> Проверить поведение метода, когда $fn == undef.
это неконсистентное состояние объекта

> Проверить, что сокет переводится в неблокирующий режим.
> А что происходит, если сокет не смог перейти в неблокирующий режим?
это как?
> Проверить, что метод вызывает incoming с правильными аргументами, в 
> зависимости от флага $self->{want_peer}
чтобы это проверить эти 5 строк, в которых негде ошибиться, нужно написать 
строк 50 теста. зачем?
> 
> И так далее по каждому методу.

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

если вы из автомобиля выкрутить 1 свечу или открутите колесо, вы предполагаете, 
что машина корректно обработает эту ситуацию?

> 
> Ведь задача юнит тестов - фиксирование интерфейсов взаимодействия разных 
> частей программы.

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

> И нужно это для того, чтобы программист сразу видел места, поведение которых 
> изменилось после последнего коммита.
> 
> > Модуль здесь - AE::HTTP::Server.
> > тесты проверяют, что этот модуль функционирует корректно.
> 
> Ваши тесты проверяют, что модуль в целом функционирует. Относительно всей 
> программы, в которой используется модуль тесты можно назвать юнит-тестами, а 
> вот относительно вашего модуля я назвал ваши тесты функциональными, т.к. вы 
> поставляете только этот модуль...
> 
> Или я о каком-то другом виде тестирования говорю?
> 
> Кстати, интересно будет услышать в докладе темы:
> 1) Виды тестирования (в качестве введения в тему)
> 2) Зачем нужны тесты
> 3) Нужно ли тестировать поведение модуля в ситуациях возникновения ошибок
> 4) До какой степени нужно покрывать тестами код программы.
> 5) Как юнит-тесты помогают в командной разработке
> 6) Как юнит-тесты помогают при рефакторинге кода.
> 7) Как сильно TDD замедляет разработку
> 

В общем про тесты и документацию это не ко мне )
по документации мой ответ - код лучшая документация.
про тесты - уже написал выше.

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




-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить