Хорошие ответы все. Я добавил бы несколько способов избежать темной стороны TDD:
я записал приложения, чтобы сделать их собственную рандомизированную самопроверку. Проблема с записью определенных тестов состоит в том, даже если Вы пишете большому количеству из них, они только покрывают случаи, о которых Вы думаете. Генераторы случайного теста находят проблемы, о которых Вы не думали.
целое понятие большого количества модульных тестов подразумевает, что у Вас есть компоненты, которые могут войти в недопустимые состояния, как сложные структуры данных. Если Вы избегаете сложных структур данных существует намного меньше для тестирования.
До степени Ваше приложение позволяет его, стесняться дизайна, который полагается на надлежащее упорядочивание уведомлений, событий и побочных эффектов. Те могут легко быть отброшены или боролись так, им нужно большое тестирование.
Из http://perldoc.perl.org/functions/my.html :
my TYPE EXPR: ATTRS
A my объявляет перечисленные переменные быть локальным (лексически) по отношению к включающему блоку, файлу или eval. Если указано более одного значения, список должен быть заключен в круглые скобки.
Точная семантика и интерфейс TYPE и ATTRS все еще развиваются. TYPE в настоящее время привязан к использованию директивы fields, а атрибуты обрабатываются с помощью директивы attributes или, начиная с Perl 5.8.0, также через модуль Attribute :: Handlers.
Он проверяет наличие пакета с таким же именем и, на данный момент, привязан к прагме fields
, которая помогает проверять опечатки в именах полей.
Например:
package MyPackage;
use fields qw/ foo bar /;
sub new { fields::new(shift) }
Затем, если вы попытаетесь запустить
use MyPackage;
my MyPackage $p1 = MyPackage->new;
print $p1->{notpresent}, "\n";
, вы получите
No such class field "notpresent" in variable $p1 of type MyPackage at ...
Помимо использования полями, лексический тип используется экспериментальной прагмой types (доступной на CPAN).