Как установить phpunit через composer
Перейти к содержимому

Как установить phpunit через composer

  • автор:

Getting Started with PHPUnit 9

This tutorial assumes that you use PHP 7.3 or PHP 7.4. You will learn how to write simple unit tests as well as how to download and run PHPUnit.

The documentation for PHPUnit 9 can be found here.

Download

PHP Archive (PHAR)

We distribute a PHP Archive (PHAR) that contains everything you need in order to use PHPUnit 9. Simply download it from here and make it executable:

Composer

You can add PHPUnit as a local, per-project, development-time dependency to your project using Composer:

➜ wget -O phpunit https://phar.phpunit.de/phpunit-9.phar ➜ chmod +x phpunit ➜ ./phpunit --version PHPUnit 9.0.0 by Sebastian Bergmann and contributors.
➜ composer require --dev phpunit/phpunit ^9 ➜ ./vendor/bin/phpunit --version PHPUnit 9.0.0 by Sebastian Bergmann and contributors.

Please refer to the documentation for details on how to verify PHAR releases of PHPUnit.

The example shown above assumes that composer is on your $PATH .

Your composer.json should look similar to this:

< "autoload": < "classmap": [ "src/" ] >, "require-dev": < "phpunit/phpunit": "^9" >>

Code

ensureIsValidEmail($email); $this->email = $email; > public static function fromString(string $email): self < return new self($email); >public function __toString(): string < return $this->email; > private function ensureIsValidEmail(string $email): void < if (!filter_var($email, FILTER_VALIDATE_EMAIL)) < throw new InvalidArgumentException( sprintf( '"%s" is not a valid email address', $email ) ); >> >

Test Code

assertInstanceOf( Email::class, Email::fromString('[email protected]') ); > public function testCannotBeCreatedFromInvalidEmailAddress(): void < $this->expectException(InvalidArgumentException::class); Email::fromString('invalid'); > public function testCanBeUsedAsString(): void < $this->assertEquals( '[email protected]', Email::fromString('[email protected]') ); > > 

Test Execution

PHP Archive (PHAR)

➜ ./phpunit --bootstrap src/autoload.php tests PHPUnit 9.0.0 by Sebastian Bergmann and contributors. . 3 / 3 (100%) Time: 70 ms, Memory: 10.00MB OK (3 tests, 3 assertions)

The above assumes that you have downloaded phpunit.phar and put it into your $PATH as phpunit and that src/autoload.php is a script that sets up autoloading for the classes that are to be tested. Such a script is commonly generated using a tool such as phpab.

Composer

➜ ./vendor/bin/phpunit tests PHPUnit 9.0.0 by Sebastian Bergmann and contributors. . 3 / 3 (100%) Time: 70 ms, Memory: 10.00MB OK (3 tests, 3 assertions)

The above assumes that vendor/autoload.php , the autoloader script managed by Composer, exists and is able to load the code for the Email class. Depending on how you set up autoloading, you may need to run composer dump-autoload now.

—bootstrap src/autoload.php instructs the PHPUnit command-line test runner to include src/autoload.php before the tests are run.

tests instructs the PHPUnit command-line test runner to execute all tests found declared in *Test.php sourcecode files in the tests directory.

tests instructs the PHPUnit command-line test runner to execute all tests found declared in *Test.php sourcecode files in the tests directory.

TestDox

Below you see an alternative output which is based on the idea that the name of a test can be used to document the behavior that is verified by the test:

➜ ./phpunit --bootstrap src/autoload.php --testdox tests PHPUnit 9.0.0 by Sebastian Bergmann and contributors. Email ✔ Can be created from valid email address ✔ Cannot be created from invalid email address ✔ Can be used as string
➜ ./vendor/bin/phpunit --testdox tests PHPUnit 9.0.0 by Sebastian Bergmann and contributors. Email ✔ Can be created from valid email address ✔ Cannot be created from invalid email address ✔ Can be used as string

Copyright © Sebastian Bergmann.

1. Установка PHPUnit

PHPUnit latest требует PHP 7.1; настоятельно рекомендуется использовать последнюю версию PHP.

PHPUnit требует расширений dom и json, которые обычно включены по умолчанию.

PHPUnit также требует расширений pcre, reflection и spl. Эти стандартные расширения включены по умолчанию и не могут быть отключены без внесения изменений в систему сборки PHP и/или в исходный код C.

Для функциональности отчёта по покрытию кода тестами требуются расширения Xdebug (2.5.0 или новее) и tokenizer. Генерация XML-отчётов требует расширения xmlwriter.

PHP Archive (PHAR)

Самый простой способ получить PHPUnit — загрузить PHP Archive (PHAR), в котором есть все необходимые (а также некоторые необязательные) зависимости PHPUnit, собранные в одном-единственном файле.

Расширение phar обязательно для использования PHP Archives (PHAR).

Если расширение Suhosin включено, вам необходимо разрешить выполнение PHAR в вашем php.ini :

suhosin.executor.include.whitelist = phar

Для глобальной установки PHAR:

$ wget https://phar.phpunit.de/phpunit-|version|.phar $ chmod +x phpunit-|version|.phar $ sudo mv phpunit-|version|.phar /usr/local/bin/phpunit $ phpunit --version PHPUnit x.y.z by Sebastian Bergmann and contributors.

Вы также можете использовать загруженный PHAR-файл напрямую:

$ wget https://phar.phpunit.de/phpunit-|version|.phar $ php phpunit-|version|.phar --version PHPUnit x.y.z by Sebastian Bergmann and contributors.

Windows

Глобальная установка PHAR включает ту же самую процедуру, что и ручная установка Composer на Windows:

  1. Создать папку для двоичных файлов PHP; например, C:\bin
  2. Добавить ;C:bin к вашей переменной окружения PATH (справочная информация по этой теме)
  3. Загрузить https://phar.phpunit.de/phpunit-|version|.phar и сохранить файл по пути C:\bin\phpunit.phar
  4. Открыть командую строку (например, нажать Windows R » ввести cmd » ENTER )
  5. Создать пакетный скрипт (в результате получится C:\bin\phpunit.cmd ):

C:\Users\username> cd C:\bin C:\bin> echo @php "%~dp0phpunit.phar" %* > phpunit.cmd C:\bin> exit 
C:\Users\username> phpunit --version PHPUnit x.y.z by Sebastian Bergmann and contributors.

Для командных оболочек Cygwin и/или MingW32 (например, TortoiseGit) вы можете пропустить шаг 5 выше, просто сохранив файл как phpunit (без расширения .phar ) и сделав его исполняемым через команду chmod 775 phpunit .

Проверка релизов PHPUnit PHAR

Все официальные релизы кода, распространяемые проектом PHPUnit, подписываются релиз-менеджером. Подписи PGP и хеши SHA1 доступны для проверки на phar.phpunit.de.

В следующем примере показано, как работает проверка релиза. Мы начинаем с загрузки phpunit.phar , а также его отделённой подписи PGP phpunit.phar.asc :

wget https://phar.phpunit.de/phpunit.phar wget https://phar.phpunit.de/phpunit.phar.asc

Мы хотим проверить PHP Archive ( phpunit.phar ) PHPUnit с его отделённой подписью ( phpunit.phar.asc ):

gpg phpunit.phar.asc gpg: Signature made Sat 19 Jul 2014 01:28:02 PM CEST using RSA key ID 6372C20A gpg: Can't check signature: public key not found

У нас нет открытого ключа релиз-менеджера ( 6372C20A ) в нашей локальной системе. Для продолжения проверки нам нужно получить открытый ключ релиз-менеджера с сервера ключей. Один из таких серверов — это pgp.uni-mainz.de . Серверы открытых ключей связаны между собой, поэтому вы можете подключиться к любому из них.

gpg --keyserver pgp.uni-mainz.de --recv-keys 0x4AA394086372C20A gpg: requesting key 6372C20A from hkp server pgp.uni-mainz.de gpg: key 6372C20A: public key "Sebastian Bergmann " imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) 

Теперь мы получили открытый для сущности, известной как «Sebastian Bergmann ». Однако, у нас нет способа проверить, что этот ключ был создан человеком под именем Себастьян Бергман (Sebastian Bergmann). Но давайте снова попробуем проверить подпись релиза.

gpg phpunit.phar.asc gpg: Signature made Sat 19 Jul 2014 01:28:02 PM CEST using RSA key ID 6372C20A gpg: Good signature from "Sebastian Bergmann " gpg: aka "Sebastian Bergmann " gpg: aka "Sebastian Bergmann " gpg: aka "Sebastian Bergmann " gpg: aka "Sebastian Bergmann " gpg: aka "[jpeg image of size 40635]" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: D840 6D0D 8294 7747 2937 7831 4AA3 9408 6372 C20A

В данный момент подпись хорошая, но мы не доверяем этому ключу. Хорошая подпись означает, что файл не был изменён. Однако ввиду характера криптографии открытого ключа вам необходимо дополнительно проверить, что ключ 6372C20A был создан настоящим Себастьяном Бергманом.

Любой злоумышленник может создать открытый ключ и загрузить его на серверы открытых серверов. Затем они могут создать вредоносный релиз, подписанный этим поддельным ключом. key. После чего, если вы попытаетесь проверить подпись этого испорченного релиза, проверка будет успешной, потому что ключ не является «реальным» ключом. Поэтому вам нужно проверить подлинность этого ключа. Однако проверка подлинности открытого ключа выходит за рамки данной документации.

Возможно, было бы целесообразно создать скрипт командной оболочки для управления установкой PHPUnit, который проверяет подпись GnuPG перед запуском набора тестов. Например:

#!/usr/bin/env bash clean=1 # Удалить phpunit.phar после завершения выполнения тестов? aftercmd="php phpunit.phar --bootstrap bootstrap.php src/tests" gpg --fingerprint D8406D0D82947747293778314AA394086372C20A if [ $? -ne 0 ]; then echo -e "\033[33mDownloading PGP Public Key. \033[0m" gpg --recv-keys D8406D0D82947747293778314AA394086372C20A # Sebastian Bergmann gpg --fingerprint D8406D0D82947747293778314AA394086372C20A if [ $? -ne 0 ]; then echo -e "\033[31mCould not download PGP public key for verification\033[0m" exit fi fi if [ "$clean" -eq 1 ]; then # Let's clean them up, if they exist if [ -f phpunit.phar ]; then rm -f phpunit.phar fi if [ -f phpunit.phar.asc ]; then rm -f phpunit.phar.asc fi fi # Давайте возьмём последний релиз и его подпись if [ ! -f phpunit.phar ]; then wget https://phar.phpunit.de/phpunit.phar fi if [ ! -f phpunit.phar.asc ]; then wget https://phar.phpunit.de/phpunit.phar.asc fi # Прорить перед запуском gpg --verify phpunit.phar.asc phpunit.phar if [ $? -eq 0 ]; then echo echo -e "\033[33mBegin Unit Testing\033[0m" # Запустить тестовый набор `$after_cmd` # Очистка if [ "$clean" -eq 1 ]; then echo -e "\033[32mCleaning Up!\033[0m" rm -f phpunit.phar rm -f phpunit.phar.asc fi else echo chmod -x phpunit.phar mv phpunit.phar /tmp/bad-phpunit.phar mv phpunit.phar.asc /tmp/bad-phpunit.phar.asc echo -e "\033[31mSignature did not match! PHPUnit has been moved to /tmp/bad-phpunit.phar\033[0m" exit 1 fi 

Composer

Просто добавьте (для разработки) зависимость phpunit/phpunit в файл composer.json вашего проекта, если вы используете Composer для управления зависимостями в вашей проекте:

composer require --dev phpunit/phpunit ^|version| 

Необязательные пакеты

Доступны следующие необязательные пакеты:

Класс-утилита для вызова функций обратного вызова с тайм-аутом. Этот пакет необходим для обеспечения выполнения тайм-аутов тестирования в строгом режиме.

Этот пакет включён в дистрибутив PHAR PHPUnit. Его можно установить через Composer, используя следующую команду:

composer require --dev phpunit/php-invoker

Порт DbUnit для PHP/PHPUnit для поддержки тестирования взаимодействия с базами данных.

Этот пакет не включён в дистрибутив PHAR PHPUnit. Его можно установить через Composer, используя следующую команду:

composer require --dev phpunit/dbunit

Установка PHPUnit.

Существует несколько способов установки PHPUnit — фреймворка для модульного тестирования скриптов языка PHP.
Страница официальной документации по установке PHPUnit на английском языке: https://phpunit.de/manual/current/en/installation.html
Рассмотрим способы установки подробно.

1. Composer

Довольно простой и в настоящее время оптимальный способ — с помощью менеджера зависимостей для PHP — Composer. Более-менее большой проект, как правило, использует данный инструмент, к тому же Composer имеет автозагрузчик который удобно использовать и для подключения тестируемого кода.
Узнать текущую версию PHPUnit можно тут. В примерах установки мы будем устанавливать версию 5.7. Более поздние версии требуют наличия PHP 7+ А PHPUnit 5.7 поддерживается на PHP 5.6, PHP 7.0 и PHP 7.1
Итак, команда для Composer устанавливающая PHPUnit версии 5.7 :

composer require --dev phpunit/phpunit ^5.7

Если нужно — расширение для тестов с базой данных

composer require --dev phpunit/dbunit

Установив можно запустить тестирование командой из корня проекта:

vendor\bin\phpunit tests

тут имеется ввиду, что тесты будут храниться в папке tests , расположеной в корне приложения на уровне файла composer.json в противном случае нужно указать другой путь к папке с тестами.

Чтобы не набирать каждый раз строку vendor\bin\phpunit, можно:

1) Если нужно только для текущего проекта — создать файл phpunit.bat в корневой папке приложения с содержимым:

@ECHO OFF setlocal DISABLEDELAYEDEXPANSION SET BIN_TARGET=%~dp0vendor\phpunit\phpunit\phpunit php "%BIN_TARGET%" %*

После этого можно будет запускать тестирование так:

phpunit unit

2) Установить phpunit глобально, чтобы вызывать простой командой (phpunit) из любой директории любого проекта:

composer global require --dev phpunit/phpunit ^5.7

Это установит phpunit в директорию текущего пользователя, например:
C:\Users\username\AppData\Roaming\Composer\vendor
и сохранит запускающий файл в папке vendor\bin пользователя. Далее нужно прописать путь к этому файлу в системную переменную PATH (если нет еще), добавить путь к папке bin:

C:\Users\username\AppData\Roaming\Composer\vendor\bin

где username заменить на имя пользователя.

Если файл, методы которого хотим протестировать, не подключаются автоматически в тестирующем его классе, то нужно сделать это самостоятельно. Т.к. используется Composer, то делать это лучше всего с помощью его автозагрузчика. Для этого нужно отредактировать объект «autoload» в файле composer.json. Например кое-где для демонстрации тестирования я классам присвоил пространство имен main, а сами файлы положил в корень проекта. В таком случае получилось:

"autoload": < "psr-4": < "main\\": "" >>

Теперь классы с пространством имен «main» автоматически будут найдены в корне проекта.
Или, например, создал в корне каталог app с файлами классов, которые нужно тестировать. Для того, что бы эти классы автоматически подключались нужно прописать:

«autoload»:

После внесения изменений в composer.json нужно обновить автозагрузчик:

composer dump-autoload -o

Если PHPUnit устанавливался глобально, то предварительно нужно подключить автозагрузчик приложения (обычно это автозагрузчик Composera), чтобы файлы классов, которые нужно протестировать, автоматически подключались в классах тестов. PHPUnit позволяет выполнить определенный код, а в данном случае загрузить автозагрузчик Composera до выполнения тестирования с помощью параметра bootstrap, который должен указывать на файл подключающий этот автозагрузчик и/или что-то еще.

Параметр bootstrap можно:
1) указывать в командной строке при вызове phpunit:

phpunit --bootstrap tests/bootstrap.php

или можно подключить сразу автозагрузчик Composera напрямую:

phpunit --bootstrap vendor/autoload.php

2) указать в конфигурационном файле phpunit.xml:
или, если нужно только лишь подключить автозагрузчик Composera:

Если указываем подключение файла bootstrap.php, то создаем его в папке tests:

теперь классы приложения будут подключены.

Если при создании приложения не используется php-фреймворк, а PHPUnit установлен не глобально (в папку vendor проекта) — не забываем сами подключить автозагрузчик Composer в «точке входа», обычно это index.php

require_once './vendor/autoload.php';

тут рассчитано, что индексный файл у вас находится на уровне каталога vendor (который появляется после использования Composer), т.е., возможно, понадобится подняться на уровень-два выше к данному каталогу.
Используя Composer вам не придется использовать аналогичную конструкцию типа require для подключения тестируемого класса, как это часто указано в примерах использования PHPUnit в интернете.

Осталось добавить, что при написании тестов в PHPUnit установленного с помощью Composer , ваш тестирующий класс (содержащий тесты) должен наследовать от класса phpunit:

class ClassnameTest extends PHPUnit\Framework\TestCase <>

2. Ручная установка

2.1 Установка вручную для Windows.

Скачать файл с последней версией PHPUnit https://phar.phpunit.de/phpunit.phar

Последний релиз требует PHP 7+, чтобы получить поддержку PHP 5.6, скачать:
https://phar.phpunit.de/phpunit-5.7.17.phar

Устанавливать будем в папку с php. При этом путь к интерпретатору php должен быть прописан в системную переменную PATH.
Итак, поместить файл в каталог с интерпретатором php (где находится файл php.exe), например W:\modules\php\PHP-5.6.
Перейти в каталог с PHP.exe, например у меня на OpenServere:

cd W:\modules\php\PHP-5.6

создать файл phpunit.bat в данном каталоге, чтобы получить доступ к phpunit из любой папки (например из корня своего приложения), а не только находясь в папке с php куда он установлен:

@php "%~dp0phpunit-5.7.17.phar" %*

где вместо 5.7.17 указать версию скачанного файла.
Или так:

echo @php "%~dp0phpunit.phar" %*>phpunit.bat

Проверим появился ли доступ:

phpunit --version

Файл с тестируемым классом нужно подключить в классе который его будет тестировать:

require_once dirname(__FILE__).'/../User.php';

или использовать автозагрузчик классов. Можно так же для автозагрузки подключить и использовать Composer, правда в таком случае проще и установку phpunit делать с его же помощью.

Тестирующий класс (содержащий тесты) должен наследовать от класса phpunit:

class ClassnameTest extends PHPUnit_Framework_TestCase<>
2.2 Установка вручную для Linux.

Делаем согласно документации https://phpunit.de

wget https://phar.phpunit.de/phpunit-5.7.phar chmod +x phpunit-5.7.phar sudo mv phpunit-5.7.phar /usr/local/bin/phpunit

Тут первой строкой скачиваем файл с phpunit, далее даем файлу права на запуск b потом переименовываем файл phpunit-5.7.phar в phpunit для удобства.

Так же можно скачать самую последнюю версию phpunit командой:

wget https://phar.phpunit.de/phpunit.phar

После установки проверяем phpunit командой:

phpunit --version

3. Установка с помощью PEAR

PEAR — это предшественник Composer , репозиторий PHP-классов . В настоящее время в данном репозитории находится устаревшая версия PHPUnit, тем не менее опишу и данный способ установки данного фреймворка для тестирования.

Прежде всего нужно установить (активировать) PEAR.
Опишу установку для Open Server, он содержит в себе все необходимые компоненты для этого.
В папке с интерпретатором php (например W:\modules\php\PHP-5.6) находится файл go-pear.bat и папка PEAR.
Для установки перейти из командной строки в корень папки php:

cd W:\modules\php\PHP-5.6

выполнить файл go-pear.bat, для этого набрать в консоли:

go-pear

выбрать в диалогах:
(system|local) [system] : local
Please confirm local copy by typing ‘yes’ : yes
нажать Enter
Would you like to alter php.ini ? [Y/n] : y
нажать Enter

проверить установился ли PEAR:

pear list

Теперь устанавливаем PHPUnit:

pear install PHPUnit

проверить появился ли доступ:

phpunit --version

Тестирующий класс (содержащий тесты) должен наследовать от класса phpunit:

class ClassnameTest extends PHPUnit_Framework_TestCase<>
  • Основы PHPUnit — 1 часть.
  • Основы PHPUnit — 2 часть.
  • PHPUnit — тестирование исключений, анализ покрытия кода тестами.
  • PHPUnit — создание и использование имитирующих объектов (mock), заглушек.

Автор: Сергей Дата публикации: 05.10.2017

  • Пример простого REST API на PHP.
  • Использование YouTube Data API для своего WEB-сервиса. Выборка нужных видеозаписей, получение информации.
  • Определение страны и города посетителя по его IP. Расширение GeoIP.
  • Установка, настройка и базовое использование фреймворка для тестирования «Codeception».
  • Основы PHPUnit — 1 часть.

Как установить phpunit через composer

В первую очередь необходимо убедиться, что установлен Composer — менеджер php пакетов.

Далее устанавливаем phpunit:

$ composer global require "phpunit/phpunit=4.6.*" $ sudo ln -s ~/.composer/vendor/bin/phpunit /usr/local/bin/phpunit

При работе с phpunit нам могут понадобиться некоторые дополнительные модули, такие как:

$ composer global require 'phpunit/dbunit=*' $ composer global require 'phpunit/php-invoker=*' $ composer global require 'phpunit/phpunit-selenium=*' $ composer global require 'phpunit/phpunit-story=*' $ composer global require 'phpunit/phpunit-skeleton-generator=*'

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

PHPDCDDead Code Detector (DCD) для PHP. Он сканирует в PHP проекте все неиспользуемые функции и методы и сообщает о них.

$ composer global require 'sebastian/phpdcd=*' $ sudo ln -s ~/.composer/vendor/bin/phpdcd /usr/local/bin/phpdcd
project_directory$ phpdcd .

PHPMDPHP Mess Detector. Помогает найти в коде потенциальные проблемы, такие как возможные ошибки, субоптимальный код, усложненные выражения, неиспользуемые параметры, методы, свойства.

$ composer global require 'phpmd/phpmd=2.2.*' $ sudo ln -s ~/.composer/vendor/bin/phpmd /usr/local/bin/phpmd
project_directory$ phpmd . text codesize,unusedcode,naming

PHP Depend — показывает качество дизайна кода для расширяемости, повторного использования и сопровождения.

$ composer global require 'pdepend/pdepend=*' $ sudo ln -s ~/.composer/vendor/bin/pdepend /usr/local/bin/pdepend

phpDocumentor — инструмент для генерирования документации из PHP кода.

$ composer global require 'phpdocumentor/phpdocumentor=*' $ sudo ln -s ~/.composer/vendor/bin/phpdoc /usr/local/bin/phpdoc
project_directory$ mkdir docs && phpdoc -d . -t docs

PHP CodeBrowser — инструмент для создания HTML презентации PHP кода, где выделены участки с выявленными нарушениями по обеспечению качества инструментов, таких как PHP CodeSniffer или PHPMD.

$ composer global require 'mayflower/php-codebrowser=~1.1' $ sudo ln -s ~/.composer/vendor/bin/phpcb /usr/local/bin/phpcb
project_directory$ mkdir cb && phpcb -s . -o cb

PHP Copy/Paste Detector (PHPCPD) — инструмент для поиска дублированного кода.

$ composer global require 'sebastian/phpcpd=*' $ sudo ln -s ~/.composer/vendor/bin/phpcpd /usr/local/bin/phpcpd
project_directory$ phpcpd .

PHPLOC — инструмент для быстрого измерения размера и анализа структуры PHP проекта.

$ composer global require 'phploc/phploc=*' $ sudo ln -s ~/.composer/vendor/bin/phploc /usr/local/bin/phploc
project_directory$ phploc --log-xml phploc.xml .

PHP CodeSniffer — набор из двух PHP инструментов. Основной — phpcs, позволяет выявить нарушения стандартов кодирования в PHP, CSS и JS файлах. И второй — phpcbf, позволяет проводить автоматическую коррекцию стандартов. PHP CodeSniffer является важным инструментом , благодаря которому код остается чистым и последовательным.

$ composer global require 'squizlabs/php_codesniffer=*' $ sudo ln -s ~/.composer/vendor/bin/phpcs /usr/local/bin/phpcs

Дополнительная проверка стандарта Symfony2 для PHP CodeSniffer:

$ cd ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards $ git clone git://github.com/escapestudios/Symfony2-coding-standard.git Symfony2 $ cd Symfony2 $ git checkout 2.0.1
project_directory$ find . -type f -name '*.php' -exec phpcs --standard=Symfony2 '<>' ';'
Запуск тестов

Для запуска тестов выполните команду:

$ phpunit

Для тестирования Symfony2 проекта необходимо в первую очередь обновить вендоры.

Запуск тестирования проекта:

$ phpunit -c app

Для тестирования отдельного компонента нужно выполнить команду:

$ phpunit src/Symfony/Component/Finder/

Выполняйте тестирование кода перед сохранением изменений в системе контроля версий.

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

При добавлении нового кода Вы можете проверить покрытие кода тестами, используя возможенисти phpunit:

$ phpunit --coverage-html=cov/

Проверте покрытие кода, открыв cov/index.html в браузере.

Установка одной командой
composer global require "phpunit/phpunit=4.6.*" && sudo ln -s ~/.composer/vendor/bin/phpunit /usr/local/bin/phpunit && composer global require 'sebastian/phpdcd=*' && sudo ln -s ~/.composer/vendor/bin/phpdcd /usr/local/bin/phpdcd && composer global require 'phpmd/phpmd=2.2.*' && sudo ln -s ~/.composer/vendor/bin/phpmd /usr/local/bin/phpmd && composer global require 'pdepend/pdepend=*' && sudo ln -s ~/.composer/vendor/bin/pdepend /usr/local/bin/pdepend && composer global require 'phpdocumentor/phpdocumentor=*' && sudo ln -s ~/.composer/vendor/bin/phpdoc /usr/local/bin/phpdoc && composer global require 'squizlabs/php_codesniffer=*' && sudo ln -s ~/.composer/vendor/bin/phpcs /usr/local/bin/phpcs && composer global require 'mayflower/php-codebrowser=~1.1' && sudo ln -s ~/.composer/vendor/bin/phpcb /usr/local/bin/phpcb && composer global require 'sebastian/phpcpd=*' && sudo ln -s ~/.composer/vendor/bin/phpcpd /usr/local/bin/phpcpd && composer global require 'phploc/phploc=*' && sudo ln -s ~/.composer/vendor/bin/phploc /usr/local/bin/phploc && composer global require 'phpunit/dbunit=*' && composer global require 'phpunit/php-invoker=*' && composer global require 'phpunit/phpunit-selenium=*' && composer global require 'phpunit/phpunit-story=*' && composer global require 'phpunit/phpunit-skeleton-generator=*' && cd ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards && git clone git://github.com/escapestudios/Symfony2-coding-standard.git Symfony2 && cd Symfony2 && git checkout 2.0.1
Дополнительные инструменты

Есть еще несколько полезных инструментов для проверки кода.

PHP lint — инструмент для проверки кода на наличие ошибок. Этот инструмент встроен в пакет PHP и запускается командой php -l:

project_directory$ find . -type f -name '*.php' -exec php -l '<>' ';'

Twig lint — инструмент првоерки Twig шаблонов на наличие ошибок. При использовании Symfony2 можно запустить проверку командой:

project_directory$ app/console twig:lint src

В большенстве web проектов часто используется JavaScript и CSS. Для этих языков есть свои инструменты проверки кода.

Они представляет собой модули Node.js. Поэтому вначале необходимо установить Node.js.

Пример установки для Ubuntu:

$ sudo apt-get install npm nodejs $ sudo ln -s /usr/bin/nodejs /usr/bin/node

JS lint — инструмент проверки кода JavaScript. Установить его можно с помощью npm:

sudo npm install -g jslint

Проверить код можно командой:

project_directory$ find . -type f -name '*.js' -exec jslint '<>' ';'

Если нужно исключить некоторые файлы из проверки:

project_directory$ find src -type f -name '*.js' -a \( -not -name 'jquery*.js' -a -not -name 'bootstrap*.js' \) -exec jslint '<>' ';'

JS hint — еще один инструмент проверки кода JavaScript. Установить его можно с помощью npm:

sudo npm install -g jshint

Проверить код можно командой:

project_directory$ find . -type f -name '*.js' -exec jshint '<>' ';'

Если нужно исключить некоторые файлы из проверки:

project_directory$ find src -type f -name '*.js' -a \( -not -name 'jquery*.js' -a -not -name 'bootstrap*.js' \) -exec jshint '<>' ';'

CSS lint — инструмент проверки кода CSS. Установить его можно с помощью npm:

sudo npm install -g csslint

Проверить код можно командой:

project_directory$ find . -type f -name '*.css' -exec csslint '<>' ';'

Если нужно исключить некоторые файлы из проверки:

project_directory$ find src -type f -name '*.css' -a -not -name 'bootstrap*.css' -exec csslint '<>' ';'

Согласно принципу единственной обязанности — Single responsibility principle (одному из принципов SOLID, который следует применять не только к написанию кода, но и к созданию архитектуры), библиотеки, которые нужно исключить, следует выносить в отдельные бандлы (модули), как это сделал я с jquery и twitter bootstrap.

Скорость загрузки JavaScript, CSS файлов и изображений является одним из показателей качества.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *