Pull to refresh

Юнит-тестирование в PHP

PHP *
Язык PHP очень легок для изучения. Это, а так же обилие литературы «Освой _что_угодно_ за 24 часа» породило большое количество, мягко говоря, некачественного кода. Как следствие, рано или поздно любой программист, который выходит за рамки создания гостевой книги или сайта-визитки сталкивается с вопросом: «а если я здесь немножко добавлю, все остальное не ляжет?» Дать ответ на этот вопрос и на многие другие может юнит-тестирование.

В самом начале хочется оговориться — здесь речь не будет идти о TDD и методологиях разработки ПО. В данной статье я попробую показать начинающему PHP-разработчику основы использования модульного тестирования на базе фреймворка PHPUnit
Начнем?..
Total votes 97: ↑90 and ↓7 +83
Views 175K
Comments 90

Runkit + PHPUnit = 100% покрытие тестами

PHP *
Здравствуйте, уважаемые коллеги.

Одним из косвенных показателей качества кода считается code coverage — степень покрытия его тестами (как правило, имеются в виду модульные тесты). В большинстве случаев за coverage принимается соотношение количеству строк кода, в котрое попадает управление во время прогона тестов, к общему числу значимых (не являющихся комментарием, пустой строкой, или, например одной фигурной скобкой, обозначающей начало или конец блока) строк кода модуля.

Другим же условием хороших тестов является отсутствие сторонних эффектов (side effects), как например создание/удаление файлов, установка сетевых соединений, запись в порты и т.д.

Однако, когда дело касается модуля, взаимодествующего с внешним миром, эти два требования вступают в противоречие. И ладно, если речь идет о файловых операциях, когда на помощь приходит vfsStream. Но что делать, когда надо тестировать, скажем, прямую работу с сокетами или код, использующий функции curl_*?

Под катом вы найдете мое решение и, в качестве бонуса, еще одну ОПП-обертку к курлу, полностью покрытую тестами.
Читать дальше →
Total votes 35: ↑33 and ↓2 +31
Views 3.5K
Comments 15

Пространства имён + PHPUnit = 100% покрытие тестами

PHP *
Давно хотел поделиться с общественностью способом тестировать код, использующий функции для работы с внешней средой: с сокетами, БД, файлами и чем угодно ещё. Сегодня, увидев статью Runkit + PHPUnit = 100% покрытие тестами, решил, что сейчас самое время.
Решение с Runkit красивое, но есть одна проблема — Runkit не распространяется вместе PHP, его надо ставить отдельно. Я же хочу предложить подход, работающий в обычной поставке PHP 5.3+, при одном условии — проект должен использовать пространства имён.
Читать дальше →
Total votes 35: ↑33 and ↓2 +31
Views 3.3K
Comments 15

Асинхронное модульное тестирование для С++

Programming *
Sandbox
В наше время разработчику уже крайне затруднительно обойти стороной асинхронное взаимодействие между блоками кода. Это и работа с web службами, работа с браузерными движками, и работа с потоками и т.д. и т.п. можно перечислять до бесконечности. И как следствие встает проблема организации модульного тестирования объектов, выполняющих операции асинхронно, а точнее сказать в инструменте, реализующем возможность создания асинхронных тестов.Прежде чем начнем, хочу уточнить, смысл термина «асинхронный тест». Под «асинхронным тестом», понимается такой тест, который мы можем завершить сами из любого потока в любой момент времени, из любой функции.
Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Views 2.6K
Comments 14

Автоматический запуск unit-тестов для C

IT systems testing *
Я использую C для научных расчётов. А в этом случае, стоит крепко подумать, а надо ли вам вообще C?

Язык C нужен только в случае, если в ваших расчётах очень критична производительность или критичен доступ к железу. Во всех остальных случаях, я очень рекомендую высокоуровневые языки типа Ruby или Python (почти что стандарт языка для научных расчётов, очень много научных пакетов разного толка от математики до биологии) или, что лучше, сразу научные пакеты типа Sage (надстройка над python с возможностью использования символьных вычислений и очень много чего ещё, а также с возможностью подключения других математических пакетов, в случае, если возможностей Sage не хватает, прямо внутри Sage программы; о Sage, кстати, писали на хабре).

Для Python же, если производительность важна и вы не готовы вылизывать C-код до совершенства, есть Cython (авторы которого являются также авторами Sage), который компилирует почти питоновский код в C-код, достигая очень высоких показателей производительности.

Так что на этом этапе призываю вас ещё раз: подумайте, прежде чем использовать C для научных или иных расчётов! Иначе, поехали!

Итак, вы всё-таки решили использовать C. В этом случае надо организовать рабочую тестовую среду, а именно:

Читать дальше →
Total votes 13: ↑8 and ↓5 +3
Views 9.7K
Comments 5

Много текста про практику работы с PHPUnit/DbUnit

PHP *
Доброго времени суток, друзья!
Хочу поделиться опытом по борьбе с PHPUnit/DbUnit в связке с MySQL. Далее небольшая предыстория.

Краткая предыстория


В процессе написания одного веб-приложения возникла необходимость тестировать код на PHP, интенсивно взаимодействующий с БД MySQL. В проекте в качестве фреймворка модульного тестирования использовался порт xUnit — PHPUnit. В результате было принято решение писать тесты для модулей, непосредственно взаимодействующих с базой, подцепив плагин PHPUnit/DbUnit. Дальше я расскажу о тех трудностях, которые возникли при написании тестов и о том, каким способом я их преодолел. В ответ же хотелось бы получить комментарии знающих людей относительно корректности моих решений.
Читать дальше →
Total votes 27: ↑25 and ↓2 +23
Views 24K
Comments 31

Возможности FlexUnit 4.x ( Часть 1 )

Adobe Flash
Перевод поста описывающего возможности FlexUnit, оригинал: www.flexunit.org/?page_id=6

[25.14.2014] Вся документация теперь здесь: cwiki.apache.org/confluence/display/FLEX/FlexUnit

Для каждой функциональности указывается версия FlexUnit в которой она доступна.

Flex или ActionScript 3 (4.0)

FlexUnit доступен как для Flex так и для Action Script. Если вы тестируете Flex проект, то вы может найти соответствующие FlexUnit для той версии Flex которую вы используете. Что касается сборки FlexUnit для Action Script, то она будет работать с любым проектом Action Script 3.

Читать дальше →
Total votes 5: ↑4 and ↓1 +3
Views 3.8K
Comments 1

Как у меня было первый раз с Kiwi

Development for iOS *
Recovery mode
Sandbox
What's new?

В этой статье хочу рассказать о применении технологии BDD при разработке приложений под iOS.
Было интересно попробывать на практике одну из методологий: TDD или BDD. Выбор пал на BDD. Почему именно он? Очень интересно о нем рассказали на DevCamp'e в харьковском офисе Ciklum. Почему именно Kiwi? О нем также шла речь на этом пресловутом DevCamp'e. Поэтому хотелось все попробывать самому на практике. Так что, кому интересны примеры с BDD, немного сложнее, чем тестирование переворота строки или калькулятора, прошу под кат.
Читать дальше
Total votes 6: ↑3 and ↓3 0
Views 3K
Comments 2

Юнит-тестирование для чайников

Website development *IT systems testing *
Tutorial
Даже если вы никогда в жизни не думали, что занимаетесь тестированием, вы это делаете. Вы собираете свое приложение, нажимаете кнопку и проверяете, соответствует ли полученный результат вашим ожиданиям. Достаточно часто в приложении можно встретить формочки с кнопкой “Test it” или классы с названием TestController или MyServiceTestClient.



То что вы делаете, называется интеграционным тестированием. Современные приложения достаточно сложны и содержат множество зависимостей. Интеграционное тестирование проверяет, что несколько компонентов системы работают вместе правильно.

Оно выполняет свою задачу, но сложно для автоматизации. Как правило, тесты требуют, чтобы вся или почти вся система была развернута и сконфигурирована на машине, на которой они выполняются. Предположим, что вы разрабатываете web-приложение с UI и веб-сервисами. Минимальная комплектация, которая вам потребуется: браузер, веб-сервер, правильно настроенные веб-сервисы и база данных. На практике все еще сложнее. Разворачивать всё это на билд-сервере и всех машинах разработчиков?

We need to go deeper
Total votes 70: ↑63 and ↓7 +56
Views 896K
Comments 65

Притча о покрытии кода тестами

Website development *IT systems testing *
Translation

Ранним утром программист спросил великого мастера:
— Я готов писать модульные тесты. К какому покрытию кода я должен стремиться?
Великий мастер ответил:
— Не переживай о покрытии, просто пиши хорошие тесты.
Программист улыбнулся, поклонился и ушел.

Немного времени спустя другой программист задала этот же вопрос. Великий мастер указал на котел с кипящей водой и сказал:
— Сколько зерен риса я должен положить в этот котел?
Программист с озадаченным видом ответила:
— Как я могу ответить наверняка? Все зависит от того, сколько людей вам надо накормить, насколько они голодны, какие еще блюда вы подаете, сколько риса у вас есть и от многого другого.
— Совершенно верно. — сказал великий мастер.
Второй программист улыбнулась, поклонилась и ушла.
В конце дня...
Total votes 143: ↑127 and ↓16 +111
Views 41K
Comments 65

Читабельный тест

Programming *C++ *TDD *
Sandbox

Вступление

Данная статья написана в результате моих неоднократных встреч на просмотре кода с антипаттернами написания не очень читабельных тестов, не последнюю роль в которых играет неправильная работа с тестовыми данными. В рамках этой статьи я раскрою теорию читабельного теста и покажу, как достичь идентифицированных характеристик посредством вдумчивого именования и грамотного применения вынесения вспомогательных методов.

Юнит. Что это такое?

Unit testing принято переводить на русский язык как модульное тестирование. Однако слово «модуль» имеет несколько другой смысловой оттенок, ассоциирующийся со схемой развертывания. Поэтому во избежание ненужных ассоциаций будем использовать англицизм «юнит». Еще раз вспомним, что такое юнит в рамках терминологии юнит тестирования:

Юнит – это фрагмент кода, дающий в данном окружении при определенных входных данных определенные выходные данные.

определение юнита
Заметим, что кроме самого юнита остальные все компоненты этого определения могут быть вырождены в пустое множество, однако чем больше пустых участников в этой заварухе, тем меньше смысла (семантики) содержится в юните.
Читать дальше →
Total votes 11: ↑10 and ↓1 +9
Views 13K
Comments 10

test.it — тестирование JavaScript или мой велосипед с вложенностью и подробным выводом

IT systems testing *JavaScript *
Tutorial
Внимание! В статье содержатся примеры работы до релизной (до v1.0.0) версии библиотеки.
Скоро выйдет ещё одна статья. Эта только в качестве ознакомления. Всю необходимую для использования библиотеки информацию можно получить в README и комментариях в коде.


Картинка для привлечения внимания:
test.it habrahabr
Я — начинающий веб-разработчик. И не так давно мне захотелось научиться работать так, как это делают настоящие программисты.
Под этим я понимал 3 основных элемента:
  1. Использование системы контроля версий.
  2. Грамотное комментирование кода.
  3. TDD или хотя бы простое юнит-тестирование кода.

Для первого пришлось освоить азы git, и создать свой первый репозиторий на github. Для второго выбрал JsDoc, из-за которого пришлось перебраться с notepad++ на sublime text (только там был соответствующий плагин).
А вот с третьим, неожиданно для меня, возникли серьёзные трудности.
с которыми я решил бороться велосипедом
Total votes 41: ↑37 and ↓4 +33
Views 19K
Comments 55

Ключ к счастью, или Качество включенó. Крик души программиста

Positive Technologies corporate blog Website development *
В этот раз речь пойдет о модульных тестах и инспекциях кода. Когда мы в нашей команде начали использовать две эти практики в своих проектах, драйва и радости от работы прибавилось на порядок. Упомянутым темам посвящено огромное количество теоретических и практических трудов, но сегодня речь пойдет именно о личной выгоде разработчика.
Читать дальше →
Total votes 65: ↑57 and ↓8 +49
Views 24K
Comments 20

Перевод книги The Art of Unit Testing

Website development *.NET *
Всем привет!
Недавно я участвовал в попытке организации модульного тестирования в команде разработчиков. Как оказалось, для этого мне очень не хватает знаний и опыта. Т.к. у всех моих знакомых опыта примерно столько же, я решил начать восполнять пробел с прочтения книги The Art of Unit Testing (тыц тыц) — сложилось впечатление, что это «классика жанра» (ну, если даже php программисты ее рекомендуют).



Как ни странно, эта книга до сих пор не была переведена на русский язык (и, вероятно, не будет переведена). По мере чтения книги появилась идея сделать ее коллективный перевод. Мне кажется, перевод будет существенным вкладом развитие этой интересной и нужной темы.

Все отменяется. Я плохо искал, есть русская версия: www.ozon.ru/context/detail/id/26230428
Извините за беспокойство.

Я только-что залил книгу на notabenoid.com (это сервис коллективного перевода) и предлагаю всем желающим присоединиться к переводу. На хабре много людей, думаю, получится клево и относительно быстро.
Welcome!


Пусть пост повисит немного (вдруг кто-то из него узнает об отличной книге), потом скрою.
Читать дальше →
Total votes 38: ↑33 and ↓5 +28
Views 47K
Comments 23

Моки, фейки и заглушки на C++

Plarium corporate blog Website development *C++ *Game development *Unity3D *
Translation
В переводе представлен новый подход к модульному тестированию огромной базы унаследованного кода на C++, плохо реагирующей на тесты.


Читать дальше →
Total votes 13: ↑10 and ↓3 +7
Views 17K
Comments 3

Баг-убийца. Фигак, фигак и Therac-25

PVS-Studio corporate blog IT systems testing *Debugging *Industrial Programming *
Программный код начал убивать людей при помощи машин еще в 1985 году.



Типичная разовая терапевтическая доза радиации составляет до 200 рад.
1000 рад — смертельная доза. Восставшая машина фигачила в беззащитных землян 20 000 рад.

Рассмотрим случай, когда поэтапное, но не согласованное внедрение улушений софта привело к системной ошибке. К худшей в истории программной ошибке.

В Therac-25 аппаратная защита была убрана и функции безопасности были возложены на программное обеспечение.

Как проводилось расследование, что должны намотать на ус проектировщики ИТ-систем, программисты, тестировщики, чтобы не допустить подобного.
Total votes 41: ↑35 and ↓6 +29
Views 37K
Comments 40

Модульное тестирование в современных командах

IT systems testing *
Sandbox

Для кого эта статья?


Данная статья расскажет о том, как нам удалось внедрить процесс модульного тестирования в команды, работающие по классической каскадной модели, а так же в команды с гибкой методологией (agile). В нашей организации в любой команде за общий процесс и наполнение спринта задачами отвечают проджект менеджеры, которые также участвуют в обсуждении видов тестирования, необходимых под каждую задачу ( совместный мозговой штурм.) и принимают конечное решение. Поэтому моя статья будет в первую очередь нацелена на проджект менеджеров в командах (только потому что у нас они занимают именно такую роль) и всех тех, кто по долгу службы занимается сходными задачами.
Читать дальше →
Total votes 20: ↑12 and ↓8 +4
Views 9.8K
Comments 19

Тестирование с Сodeception для чайников: 3 вида тестов

PHP *Yii *Web services testing *
Tutorial

Целью данной статьи я ставил показать людям, не знакомым с тестированием, как можно действительно быстро начать тестировать, собрав все в одном месте с минимумом воды и на русском языке. Пусть это будет весьма примитивно. Пусть не очень интересно людям, которые уже живут по TDD, SOLID и другим принципам. Но дочитав до конца, любой желающий сможет сделать свой первый уверенный шаг в мир тестирования.


Мы рассмотрим приемочные (Acceptance), функциональные (Functional) и юнит-тесты или модульные тесты (Unit-Tests).

Читать дальше →
Total votes 19: ↑19 and ↓0 +19
Views 47K
Comments 8

Тестирование глазами разработчика: инструменты, мифы, ситуации

DataArt corporate blog IT systems testing *Programming *TDD *
Tutorial


Евгений Сафронов, Senior Developer, DataArt

«Тестирование можно использовать для того, чтобы доказать наличие ошибок в программе, и никогда — для того чтобы доказать их отсутствие!»
Эдсгер Дейкстра


Тестирование — это прикладная, стандартизированная, инженерная практика, которая применима в большинстве отраслей человеческой жизни. Тестирование, как философия, метрика или практика, существует намного дольше, чем программирование. К примеру, мы выковали меч. Чтобы проверить достаточно ли острым он получился, его испытывают. В некоторые эпохи даже на живом человеке, скажем, рабе.

Тестирование — это проверка работоспособности программы, предмета или любой промышленной разработки. Как и в любом деле, здесь есть свои тонкости и своя философия. Она, наверное, ближе тестировщикам, которые на произведенные нами вещи смотрят деструктивно — они с самого начала думают о том, как сломать предложенный разработчиками продукт. Это не очень типично для пользователей, которые более предсказуемы и обычно находят ошибки, случайно пытаясь сделать с нашей программой что-то нетипичное. У разработчиков подход к программам в принципе другой, но мы должны помнить: тестировщики должны ломать то, что мы создали — это их хлеб.
Читать дальше →
Total votes 16: ↑13 and ↓3 +10
Views 18K
Comments 1

Как доказать важность тестов каждому участнику проекта

Сбер corporate blog IT systems testing *
Представьте, вы за два дня полностью реализовали новую фичу. Код написан, он работает и все классно. Ваш менеджер говорит, что можно сразу в релиз. «А как же тесты?» — воскликнет какой-нибудь дотошный коллега. «А зачем?» — ответите вы в один голос с менеджером. Зачем нам писать тесты? Как объяснять их необходимость другим? Зачем вовлекать тестировщиков, аналитиков и других участников? В этом посте я расскажу, как объяснить пользу тестов любому участнику проекта, а также зачем стоит тесты автоматизировать. И подкрепим все это серьезными исследованиями.


Читать дальше →
Total votes 17: ↑16 and ↓1 +15
Views 12K
Comments 31
1