Unit-тестирование в PHP. Часть 2: знакомство с PHPUnit
Продолжение статьи о модульных тестах в PHP. В этой части займемся практикой тестирования и разберемся с базовым использованием PHPUnit.
Продолжение статьи о модульных тестах в PHP. В этой части займемся практикой тестирования и разберемся с базовым использованием PHPUnit.
Данная статья (все ее части) - это лекция о модульном тестировании, которую мне нужно было провести среди PHP-разрабочиков компании, на которую я сейчас работаю.
Я не гуру тестирования и статья не претендует на полное руководство по модульным тестам или использованию PHPUnit. По первому вопросу целые книги пишут, да и у PHPUnit есть нормальный мануал. Цель статьи - объяснить на пальцах, как создавать unit-тесты, помочь разобраться с нуля в этой теме. Я подразумеваю ваше дальшнейшее самообразование. используя эту статью, как отправную точку.
Сегодня оформлял новые страховки и назадавал вопросы в СОГАЗе. Для справки: в прошлом году я был виновником ДТП. Урон пострадавшей незначительный, пара черных царапин на черном бампере, но она обращась в страховую за выплатой. Рассказываю, как все это отразилось на моих новых страховках ОСАГО на машину и байк.
Все ниже изложенное считать от 11 мая 2017 (сегодня). Дата оформления страховки имеет значение в некоторых случаях.
Друг обратился с проблемой: все браузеры на компе перестали работать, невозможно зайти на любой сайт по защищенному SSL соединению (https). Он конечно описал проблему не так детально :) В оригинале звучало типа: "открываю Хром и все, хрен куда зайдешь. Носил в сервис, сказали, нужно переустанавливать систему". Вообще, нравится мне подход московских сервисменов: браузер глючит - переустановить систему.. Короче, причина оказалась в неожиданном месте.
Toyota Prius, 20-й кузов. Отдельная система охлаждения инвертора с электропомпой. В этом поколении помпа работает вообще всегда, и поэтому срок жизни у нее ограничен. Как проверить, что она еще работает: зажигание в позицию AC-ON (дважды нажать на START без педали тормоза). Открываем капот и слушаем с левой стороны мерное гудение. Еще один признак: крышку расширительного бачка этой системы охлаждения откройте - там должен быть заметный поток жидкости. Именно эти два признака указывают на правильную работу и помпы и системы охлаждения.
Дорос я наконец до возможности и причин купить машину. До этого момента пять лет катался на байке по дорогам России и как бы уже не новичок. Но тут.. Если коротко, можно отбросить все, что знал, опыт с нуля.
По датам сейчас уже не распишу, но каждый день для меня был событием. Купил гибрид, Toyota Prius 2005 года, левый руль. Выкупил у кента, он же мне помог с постановкой на учет. Иначе про поход в МРЭО была бы отдельная статья.
PHPUnit 5.6, метод expectException(), а так же директива @expectedException используются в тестах для указания ядру фреймворка "ожидать такое-то исключение". В итоге тест считается пройденным если исключение возникло.
И тут есть ньюансик: после того, как PHPUnit поймает ожидаемое исключение, выполнение тест-метода прекратится! Т.е. expectException() - это аналог assert-метода, только с прерыванием. Есть так же методы на проверку кода и сообщения исключения.
Google стремится сделать нашу жизнь лучше.. По крайней мере это он так считает :) К своему удивлению, недавно обнаружил потенциальную дыру в безопасности, основанную на наивности юзера. Сочетание: браузер Chrome, залогиниться в браузере, разрешить сохранение паролей и их синхронизацию. По умолчанию от юзера требуется только залогиниться, дальше Google думает за вас.
История из моей жизни. На свадьбу подарили кучку денег. Хотел купить машину - маловато будет. Понес их положить на депозит до лучших времен. И среди кучи одинаковых банкнот оказалась настоящая поддельная купюра! Для меня это было, как снежного человека встретить :D А вот менты моего восторга не разделяли. Полдня потом мариновался то в машине, то в участке.
Вчера смотрел очередной детективный сериал. Внезапно стало любопытно, а как это на самом деле - стрелять из огнестрельного пистолета. Плюс большого города - найти можно все :), в том числе и тир. Сегодня съездил и попробовал. Пять пистолетов, 4 патрона в каждый, 10 метров. Пока я под впечатлением, пишу выводы под катом.
Сталивались с проблемой "права есть, но прав нет"? Я вот сегодня опять на тех же граблях.
Линуха KUbuntu 16.01. Пытаюсь подсунуть старые базы новому MySQL-серверу. Полдня убиты, сервер побеждает.
Для эксперимента создал отдельный каталог с базами, определил владельца и права доступа. Запускаю сервер - ошибка доступа. Отлично.. Задал полные права всем - ошибка доступа. Привет, Когнитивный Диссонанс.
Официально приблуда называется "gator universal socket" и представляет собой универсальный гаечный ключ-головку. Я купил его на ebay за 400р. Почему "женский": не нужно заморачиваться, какого размера гайку или болт будем крутить, чтобы пободрать для нее головку, этот ключик подходит для любого размера от 7 до 19 мм. Чем собственно он меня и привлек :) Когда на байке приходится крутить три-четыре узла, поле вокруг него заполняется всеразмерными ключами и головками. Более того, "аллигатор" (так переводится gator с английского) может справиться не только с гайками.
Повторюсь: именно новый контакт. По проблеме, когда WhatsApp вообще не видит контактов, полно информации в Гугле с одинаковыми рекомендациями к лечению.
В связи в повсеместным использованием ООП в PHP потребовалось запилить класс исключения с удобными плюшками. Их две: из экземпляра OOPException можно получить имя класса и метода, пробросившего исключение. Это удобно использовать в дополнение к Exception::getFile(), Exception::getLine().
Без ложки дегтя не обойдется: придется переписывать все свои вызовы исключений, и наплодить наследников от продвинутого класса для замены стандартных LogicException, RuntimeException и т.д.
Статья для тех, кто вообще ничего об этом не знает. Я полировал нержавеющую сталь и алюминий. Есть небольшая разница. Под катом - какими инструментами и как можно отполировать металл. Ничего сложного тут нет, особенно когда знаешь, как и что :)
Уточняю, речь пойдет о применении наждачной бумаги, войлока и полировочной пасты. Есть и другие способы навести полировку на металле.
Предупреждение: я не несу ответственности за вред, который вы можете получить, полагаясь на эту статью. Пользуйтесь своей головой в первую очередь.
Предположим, у вас опыта, как и у меня. Т.е. вообще никакого :) Более того, я не припоминаю даже из детства, чтоб я подходил к этому снаряду. Всегда считал его девчачьей забавой. Однако, когда обруч весит 3.8кг - это совсем другой разговор. Для примера, попробуйте крутить такой бублик на руке и почувствуйте, как его тянет. Не женская нагрузка, я вам скажу.
Чего я вообще за обруч ухватился? Это, как говорится, слово за слово
Это не техническая статья, просто заметка о неожиданном решении проблемы.
Windows 7, по показаниям юзера заставка (она же хранитель экрана, она же screensaver) внезапно перестала работать года эдак два назад. Такой срок без переустановки Винды - для меня показатель. Однако, я не нашел ни вирусов, ни подозрительных объектов. Вообще ничего проблемного. Настройки хранителя разумеется выставлены, и в тесте она запускается. Но по расписанию не работает.
Сегодня поменял мышу на компе. Вуаля! Появились мыльные пузыри на экране и пузыри восторга у юзера. Теперь сидит перед монитором, медитирует.. :) Мое предположение: мышь подавала сигналы об активности, даже когда курсор не двигался. Поэтому не срабатывал таймер простоя и хранитель не запускался. Мыша, кстати, все еще рабочая, уже пятый год. Наверное просто "шумит" от старости. Кашляет, или чего там.. :)
[1oo%, EoF]Идея: сделать микроскоп из веб-камеры. Не я придумал, реализовать просто. Нужна камера с ручным фокусом. Выкручиваем объектив, переворачиваем его и приклеиваем обратно. Все, микроскоп готов. А вот что я придумал - как закрепить это дело и как интереснее использовать.
Тестовая задача одного из нанимателей: создать функционал регистрации/аутентификации юзера. Ну я и создал. При этом пароли храню в БД по схеме md5-хеш + соль. Я уже видел такое решение и посчитал его надежным. Позже, на собеседовании возникли вопросы, почему и зачем. Начали разбирать теоретические ситуации и я оказался в тупике :) Под катом - размышления на тему надежного хранения паролей юзеров.
Плохая карма вновь меня настигла. Второй байк и опять просекло прокладку под головкой блока цилиндра (ГБЦ). На Вулкане два цилиндра в раздельном исполнении, т.к. это V-Twin, но в каком именно пробой, вычислить не удалось. Поменял обе. Собсственно статья о том, как сделать свою прокладку. Для автомобилистов возможно это не проблема, но найти готовую на японбайк по нормальной цене - та еще задача.