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

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

  • автор:

Форум

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

Не могли бы вы описать процесс установки для текущей версии OS (в которой PHP 7.2 появился). Бьюсь уже второй день с этой установкой и все никак.

Сначала через composer загрузил phpunit в проект. Всё заработало, но приходилось писать полностью путь к самому phpunit и дальше имя файла-теста. Т.е. команда phpunit без прописанного пути не работала.

Затем решил попробовать установить глобально.
composer global require —dev phpunit/phpunit ^7

Phpunit загрузился в папку пользователя компа, затем добавляю в PATH путь к запускаемому файлу:
C:\Users\Admin-PC\AppData\Roaming\Composer\vendor\bin

Далее перезагружаю Open Server, иду в Дополнительно > Командная строка, делаю
phpunit —version, пишет: «phpunit» не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
«

Захожу в cmd винды, ввожу ту же команду и ответ тот же.

Помогите плиз разобраться с этой темой

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

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

Вначале нужно установить сам Composer. Как это делается, написано в статье Установка Composer в Linux .

После чего нужно дать команду установки PHPUnit. Команду нужно выполнять в каталоге веб-сервера, где находится корень сайта.

Для PHP 5.x команда будет такой:

composer require —dev phpunit/phpunit ^5.7

Для PHP 7.x команда будет такой:

composer require —dev phpunit/phpunit ^6.1

После выполнения данной команды, в корне сайта появятся следующие каталоги и файлы:

Причем, содержимое файла composer.json будет таким:

Это означает, что в вашем проекте, который представляет из себя ваш сайт, используется фреймверк PHPUnit. А наличие каталога ./vendor/phpunit говорит о том, что PHPUnit установлен.

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

После выполнения этой команды все требуемые пакеты будут установлены.

Узнать точный номер версии установленного PHPUnit можно следующей командой в корне сайта:

PHPUnit 5.7.19 by Sebastian Bergmann and contributors.

Вручную запустить файл с тестом можно командой:

Вот, в принципе, и все.

  • Установка PHPUnit через Composer в Linux
  • Тестирование кода с PHPUnit
  • Юнит-тестирование в PHP
  • PHPUnit для начинающих. Тестовые «двойники»

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.

Установка 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 часть.

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

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