Получив некоторые конструктивные отзывы о моих методах тестирования на базовом TDD в вашем новом учебном пособии по пакетам PHP , я решил прочитать Крис Хартьес «Grumpy Testing Bundle» , набор из двух книг, состоящих из Руководства программиста Grumpy по созданию тестируемых приложений PHP и Grumpy Programmer’s PHPUnit Cookbook . Я надеялся, что эти книги не позволят мне использовать дрянные приемы, которые я продемонстрировал в этом оригинальном посте и которые изначально вызвали критику Мэтью Вейера О’Пинни. В этом посте я хотел бы поделиться с вами тем, что я узнал, и насколько это мне помогло, если вообще помогло.
Руководство программиста Grumpy по созданию тестируемых PHP-приложений
Первое, что я заметил при открытии книги, было небольшое количество страниц. За огромные 20 долларов можно ожидать более 68 страниц (включая посвящение, вступление, ToC и т. Д.). Однако не следует судить о книге по ее обложке (или количеству страниц), поэтому я с энтузиазмом ныряю, игнорируя это.
Книга состоит из 15 глав и действительно начинается только в главе 7. Если вы только что прочитали учебник Питера по инструментам анализа кода и знакомы с изоляцией среды, такой как Vagrant (например, наш блок Homestead Improved ), вы можете пропустить прямо к нему, поскольку это единственные темы, которые автор затрагивает на этих первых 22 страницах. К сожалению, все идет вниз оттуда из-за серьезной устаревания.
- автор упоминает PHPUnit и его установку через PEAR, когда это больше не поддерживается . Это смутило бы новых читателей, незнакомых с ситуацией. На самом деле, я призываю всех авторов и разработчиков PHP открыто отвергать PEAR как пережиток прошлого, который больше не будет использоваться для каких-либо целей. Если у вас есть инструкции PEAR в ваших постах или книгах, обновите ваши материалы, чтобы использовать Composer.
- автор упоминает, что приложение, которое мы будем использовать, находится на OS X определенной версии, но затем продолжает говорить о виртуальных машинах и упоминает Vagrant. Это ставит под сомнение необходимость даже упоминания исходной установки, поскольку это просто вводит в заблуждение пользователей других операционных систем и должно быть совершенно неуместно, если нужно отстаивать лучшие практики на основе виртуальных машин.
- автор ссылается на проблемы нестабильности Vagrant, но это уже не так — Vagrant уже некоторое время стабилен и без проблем, и временные ошибки не должны указываться так заметно, поскольку они быстро теряют актуальность.
- В какой-то момент был упомянут проект Phix, который с самого начала был замечательным руководством до создания Composer по созданию разделяемых компонентов. Composer сделал его устаревшим, и сайт скоро будет закрыт , поэтому ссылки на него должны отражать это
- некоторые ссылки тоже мертвы, например http://framework.zend.com/manual/en/zend.dom.query.html . Игнорируя тот факт, что сегодня существуют более совершенные компоненты, подходящие для задачи обхода DOM, автор без официального редактора и издательства должен всегда поддерживать список ссылок в данном фрагменте опубликованного коммерческого произведения и поддерживать их в актуальном состоянии.
В следующих главах примеры кода немногочисленны и далеки друг от друга, но те, что есть, хорошо продуманы и помогают проиллюстрировать важность принципов SOLID при разработке тестируемых приложений — конечно же, главной цели книги. Единственное, что я имею в виду при работе с примерами, это то, что они недостаточно объяснены и часто требуют ссылки на документы PHPUnit. Например, код:
// Create a mock object $testRequest = $this-> getMock( '\Grumpy\Request' , array( 'getUri' ) ); // Create our test response $testRequest -> expects() -> method( 'getUri' ) -> with( '/dashboard' );
… хотя технически исправно, не рассекается. Чтобы выяснить, что expects
, method
и методы, требуется посещение документации, и это нарушает плавность чтения и снижает доверие к людям, незнакомым с PHPUnit, вызывая чувство «Должен ли я уже понимать это? Почему не я?
Некоторые части, с другой стороны, очень хорошо продемонстрированы и описаны. Конкретный случай насмешек провайдера Facebook Connect проливает свет на концепцию легкого насмешек и того, что им не нужно зависеть от внешних ресурсов лучше, чем официальные документы PHPUnit.
Как и многие другие материалы в форме книги или конференции сегодня, принципы SOLID отстаиваются в двух-трех следующих главах, и подавляющее большинство контента будет (вам) знакомо, если вы хотя бы хоть немного знаете о них. что твердое означает. Прочитайте абсолютно удивительные учебники Алехандро Гервасио (мне еще предстоит найти более качественные и более простые объяснения концепций SOLID, чем его), и другой кусок книги (и не только эта книга!) Быстро устареет.
Затем наступает внезапное окончание книги. Я говорю окончание, потому что главы становятся переизданными сообщениями в блогах, начиная с главы 9. Книга, которая в последний раз обновлялась в 2013 году и первоначально была опубликована в 2012 году, не должна цитировать неизмененные ресурсы 5-6 лет. Это просто недопустимо
- с появлением таких инструментов, как http://psysh.org/ , глава 9, копия этого 5-летнего поста в блоге кажется устаревшей.
- Глава 10 является копией этого старого сообщения в блоге . Его актуальность в этой книге сомнительна.
- глава 11 является репостом этого поста, который, опять же, 5 лет и полностью устарел. Чтобы узнать о современных CI-решениях в мире PHP, просто обратитесь к этим учебным пособиям .
- глава 12, еще один репост поста в блоге, который я не смог найти, рассказывает о долгах инфраструктуры — искусстве перехода от сред личного разработчика и к водам виртуальных машин для унифицированных сред для всей команды. Эта тема упоминается в более короткой и более эффективной форме в первых главах книги, поэтому, почему она повторяется, неизвестно.
- глава 13 говорит о страхе перед переменами, действительном сдерживающем фактором при обновлении. Это хороший пост, но он лучше подходит для введения в книгу.
- добросовестная пощечина, глава 14 — почти колоссальные 7 лет. Хотя в заявлении об отказе от ответственности автор упоминает, что содержание по-прежнему актуально, я могу заверить вас, что это не так, в любом случае. В нем говорится о сильно устаревших версиях фреймворка, которые сегодня потеряли свою актуальность (версии CakePHP и CodeIgniter, на которые ссылается книга, устарели, ZF1, каким бы плохим он ни был, был заменен ZF2, от которого страдает анти-паттерн, а Symfony изменил свой архитектура полностью с тех пор).
В финале Крис говорит: «Я знаю, что в этом руководстве есть много вещей, которые вы должны рассмотреть». Но… на самом деле это не так. Книги, столь же устаревшие, как это, должны быть полностью переписаны, их старое содержание переработано, чтобы лучше соответствовать современному контексту, и должны быть опубликованы новые издания. В конце концов, для этого и нужны новые издания.
Из-за ограниченного объема новых знаний, усваиваемых при чтении этой короткой книги, ее низкий счетчик страниц, учитывая цену — особенно учитывая, что вы платите за две с половиной главы вместо 15 в этой книге, поскольку это только правильно начинается в главе 7 и заканчивается в главе 9 началом копий блога — случайные опечатки, указывающие на отсутствие опытного редактора английского языка и его устаревание, я даю ему 1/5 и не могу рекомендовать вам его купить.
Я считаю Модернизацию устаревших приложений в PHP гораздо лучшей ссылкой на создание тестируемых PHP-приложений, потому что в них используется практический подход, который охватывает тестирование наряду со всеми другими исправлениями и лучшими практиками. Это дороже, но оно того стоит.
Grumpy Programmer’s PHPUnit Cookbook
Разочаровавшись, я перешел ко второй части связки.
После прекрасного предисловия Джастина Сирлса первые 22 страницы этой книги — глоток свежего воздуха. Уже в этом коротком сегменте вы узнали больше, чем во всей первой книге — различные варианты запуска различных типов тестов и получения разных выходных данных, множество полезных советов и, как правило, вещи, которые бесконечная и пугающая документация PHPUnit не облегчает для новичков ,
Хотя я бы предпочел, чтобы примеры кода были более реальными, а не foos и барами, макеты и заглушки хорошо объяснены, их подтипы определены (шпионы и фиктивные!), И представлены примеры использования. Только в одной главе «Тестовые пары» я перешел от позиции «Зачем использовать макет, когда я могу просто использовать реальный класс» к «Хорошо, я больше не буду использовать реальные классы». Глава о поставщиках данных была настолько короткой, насколько это было возможно, но в ней объяснялись некоторые вещи, о которых я никогда не узнал менее чем за 10 минут — если бы я прочитал ее, прежде чем писать пост, о котором я упоминал во вступительном абзаце этого обзора, я бы избежал презрение 🙂
Книга далека от совершенства и имеет свои недостатки. Еще раз, есть немного устаревшие инструкции по установке. PEAR снова упоминается с несколько устаревшим подходом Composer. Вся эта часть может быть переработана в один абзац, где PHPUnit находится в блоке «require-dev» composer.json
, хотя, учитывая аудиторию, сомнительно, нужны ли нам вообще какие-либо инструкции по установке — книга нацелена на люди, которые уже заинтересованы в PHPUnit и, следовательно, уже используют его. Удаление инструкций по установке в целом увеличило бы долговечность книги, одновременно сосредоточив внимание на целевом содержимом.
Аналогично, книга нуждается в обновлении до самой последней версии PHPUnit, где, например, больше нет «getObjectForTrait», но это .
Как и в предыдущей книге, ссылки нуждаются в обновлении, а также есть некоторые орфографические («Тестирование API») и ошибки форматирования в книге, что снова указывает на отсутствие технического редактора, но ничего серьезного:
В общем, недостатки, о которых я упоминаю, придирчивы — вторая книга — отличное руководство пользователя по PHPUnit, и я действительно рад идти вперед и тестировать, тестировать, тестировать. 3.5 / 5 — было бы 4.5 / 5, если бы вышеупомянутых проблем не было.
Вывод
Как сумма его частей, комплект разочаровывает. Первая книга была полностью пропущена, но мне нравится и я намерен и впредь использовать в качестве справочника вторую, особенно если она будет обновлена. Просто грустно снова видеть недостаток качества публикаций Leanpub. Люди, которые формально не обучены передаче знаний, часто отказываются признавать, что им нужна профессиональная помощь, и просить друзей, коллег и семью об отзывах и мнениях — это ужасная идея. Нужен беспристрастный профессионал, который может дать вам прямое объяснение, исправить ваши ошибки в некоторых случаях и указать пропущенные оценки в других случаях. Устаревшие инструкции — это одно и единственная ответственность автора, но технические ошибки, неработающие ссылки и проблемы с форматированием легко исправимы в современном издательском мире, и для них нет оправданий — в сообщениях в блогах или книгах.
Например, есть простое исправление для мертвых ссылок. Направляйте ссылки в своей книге на сокращенные формы и меняйте конечные точки сокращенных ссылок, когда требуется обновление. Тогда нет необходимости переиздавать вашу книгу. Например, ссылка, которая говорит «последняя документация», но ведет к документации по PHPUnit 3.7, далеко не последняя. Однако, если вы укажете на что-то вроде http://grm.py/phpunit_assertdoc_latest
, все, что вам нужно сделать, это изменить конечный пункт назначения по ссылке, и все готово на неопределенный срок. Вы даже можете установить напоминание для себя проверять ссылки каждые 6 месяцев — это не займет больше часа, когда они все в одном месте, легко обновляются.
В общем, я бы порекомендовал получить поваренную книгу PHPUnit, если вы найдете ее со скидкой — но пока она не получит некоторую любовь от автора и обновится, платить полную цену за нее просто не стоит. Вместо этого прочитайте статью « Модернизация старых приложений в PHP» — вы узнаете больше о реальных запоминающихся примерах.