Установка
PHP — это язык программирования общего назначения. Изначально он поддерживал только парадигму процедурного программирования, однако сегодня в большинстве случаев код PHP использует возможности языка для объектно-ориентированного программирования. Поскольку PHP особенно хорошо подходит для веб-разработки, вероятно, вы впервые познакомились с ним в среде, где код PHP выполняется на веб-сервере.
PHPUnit предоставляет среду для написания тестов, а также инструмент командной строки для их запуска. Прежде чем обсуждать получение и использование PHPUnit, рассмотрим установку и настройку интерпретатора PHP для командной строки.
Для PHPUnit 13 требуется PHP 8.4; настоятельно рекомендуется использовать последнюю версию PHP.
PHP в командной строке
Начнём с установки интерпретатора PHP для командной строки, а также расширений PHP, необходимых для использования PHPUnit.
Установка интерпретатора PHP для командной строки
Fedora
На момент написания этой документации актуальной версией этого дистрибутива Linux является Fedora 44. По умолчанию в неё входит PHP 8.5. Вот как установить интерпретатор PHP для командной строки вместе с расширениями, необходимыми для PHPUnit:
sudo dnf install php-cli \
php-json \
php-mbstring \
php-process \
php-xml \
php-pecl-pcov \
php-pecl-xdebug
Если вы используете более старую версию Fedora, ознакомьтесь с репозиторием пакетов, который поддерживает Реми Колле.
Debian
На момент написания этой документации актуальной версией этого дистрибутива Linux является Debian 13. По умолчанию в неё входит PHP 8.4. Вот как установить интерпретатор PHP для командной строки вместе с расширениями, необходимыми для PHPUnit:
sudo apt install php-cli \
php-json \
php-mbstring \
php-xml \
php-pcov \
php-xdebug
Если вы используете более старую версию Debian, ознакомьтесь с репозиторием пакетов, который поддерживает Ондржей Сури.
Ubuntu
На момент написания этой документации актуальной версией этого дистрибутива Linux является Ubuntu 26.04. По умолчанию в неё входит PHP 8.5. Вот как установить интерпретатор PHP для командной строки вместе с расширениями, необходимыми для PHPUnit:
sudo apt install php-cli \
php-json \
php-mbstring \
php-xml \
php-pcov \
php-xdebug
Если вы используете более старую версию Ubuntu, ознакомьтесь с репозиторием пакетов, который поддерживает Ондржей Сури.
macOS
Самый распространённый способ установить PHP в macOS — использовать Homebrew. Инструкции ниже предполагают, что Homebrew уже установлен и настроен.
Мы воспользуемся формулами homebrew-php, которые поддерживает Шивам Матур. Следующая команда загрузит эти формулы:
brew tap shivammathur/php
brew tap shivammathur/extensions
Следующая команда установит PHP 8.4:
brew install shivammathur/php/php@8.4
Следующие расширения, необходимые для PHPUnit, уже установлены и включены по умолчанию:
domjsonlibxmlmbstringxmlxmlwriter
Если вы хотите собирать данные о покрытии кода, необходимо дополнительно установить и включить одно из следующих расширений:
pcovxdebug
Следующая команда установит и включит расширение pcov:
brew install pcov@8.4
Следующая команда установит и включит расширение xdebug:
brew install xdebug@8.4
Windows
Нативные двоичные файлы
Проект PHP предоставляет нативные двоичные файлы для Windows на сайте windows.php.net. Выберите подходящий пакет двоичных файлов для вашей архитектуры (32- или 64-разрядной) и версии Windows и следуйте инструкциям по установке на этом сайте.
Включите расширение mbstring, добавив extension=mbstring в файл конфигурации php.ini, используемый интерпретатором PHP для командной строки.
Подсистема Windows для Linux
Подсистема Windows для Linux позволяет запускать в Windows 10 (или более поздней версии) исполняемые двоичные файлы Linux в формате ELF.
Обновите Windows до последней версии, установите последнюю версию подсистемы Windows для Linux и установите выбранный дистрибутив Linux из Microsoft Store.
Затем следуйте инструкциям по установке из этой главы для выбранного дистрибутива Linux.
Использование интерпретатора PHP для командной строки
Теперь интерпретатор PHP для командной строки настроен, и пришло время научиться им пользоваться.
С помощью php --version мы можем проверить, что интерпретатор PHP для командной строки, php, находится в пути поиска, работает и узнать его версию.
Настройка PHP для разработки
В этом разделе мы убедимся, что интерпретатор PHP для командной строки настроен так, чтобы мы могли правильно использовать PHPUnit.
Приведённые ниже директивы конфигурации следует добавить в файл конфигурации PHP. С помощью php --ini мы можем запросить у интерпретатора PHP для командной строки путь к используемому файлу или файлам конфигурации.
При запуске тестов мы хотим видеть все ошибки, предупреждения, уведомления PHP и так далее.
display_errors=On
display_startup_errors=On
error_reporting=-1
Значение, используемое с error_reporting, представляет собой битовую маску, с помощью которой можно включать и отключать вывод различных типов ошибок, поддерживаемых PHP. Если установить -1, мы всегда будем видеть все ошибки.
Когда загружен Xdebug, мы не хотим, чтобы во время выполнения тестов он выводил трассировки исключений:
xdebug.show_exception_trace=0
Вот как включить функцию Xdebug для сбора данных о покрытии кода:
xdebug.mode=coverage
Обратите внимание, что директива конфигурации xdebug.mode принимает список режимов, разделённых запятыми. Для работы сбора данных о покрытии кода среди этих режимов должен быть coverage.
Если тестируемый код содержит инструкции assert(), мы хотим, чтобы они выполнялись и приводили к возникновению исключений:
zend.assertions=1
assert.exception=1
Сбор данных о покрытии кода и создание отчёта о покрытии кода иногда требуют больше памяти, чем PHP разрешено использовать по умолчанию:
memory_limit=-1
Рекомендуется загружать Xdebug только тогда, когда он нужен, например для отладки или сбора данных о покрытии кода.
Для сбора данных о покрытии кода, если вас интересует только покрытие строк, по соображениям производительности рекомендуется использовать расширение PCOV, а не Xdebug.
Не беспокойтесь, если термины «покрытие кода» или «покрытие строк» пока вам ни о чём не говорят. Позже мы подробно их рассмотрим.
Установка PHPUnit
PHP-архив (PHAR)
Рекомендуемый способ установить и использовать PHPUnit — скачать дистрибутив, упакованный в PHP-архив (PHAR). Выпуски PHPUnit в виде PHP-архивов доступны на https://phar.phpunit.de/.
Например, на https://phar.phpunit.de/phpunit-10.phar всегда можно найти последнюю версию PHPUnit 10. На https://phar.phpunit.de/phpunit-10.0.0.phar всегда можно найти указанную версию PHPUnit. На https://phar.phpunit.de/phpunit-snapshot.phar всегда можно найти последний снимок разрабатываемой версии PHPUnit.
Такой PHP-архив содержит все необходимые (а также некоторые необязательные) зависимости PHPUnit в одном файле. Для использования PHPUnit из PHP-архива требуется расширение PHAR (ext/phar).
Ручная загрузка PHAR
Вы можете просто скачать выпуск PHPUnit, упакованный в PHP-архив, и сразу же использовать его:
wget -O phpunit.phar https://phar.phpunit.de/phpunit-10.phar
php phpunit.phar --version
PHPUnit 10.0.0 by Sebastian Bergmann and contributors.
Обычно PHAR делают исполняемым:
chmod +x phpunit.phar
Теперь вы можете непосредственно запустить PHAR:
./phpunit.phar --version
PHPUnit 10.0.0 by Sebastian Bergmann and contributors.
Все официальные выпуски, распространяемые проектом PHPUnit, подписаны менеджером соответствующего выпуска. PGP-подписи и хеши SHA256 для проверки доступны на https://phar.phpunit.de/.
Вот пример ручной проверки PHP-архива выпуска PHPUnit с помощью его PGP-подписи:
wget -O phpunit.phar https://phar.phpunit.de/phpunit-10.phar
wget -O phpunit.phar.asc https://phar.phpunit.de/phpunit-10.phar.asc
gpg --keyserver pgp.uni-mainz.de --recv-keys 0x4AA394086372C20A
gpg phpunit.phar.asc
Обычно в разных проектах используют разные версии PHPUnit. Для этого PHP-архив PHPUnit помещают в каталог проекта. Типичная структура каталогов PHP-проекта выглядит так:
├── public
├── src
├── tests
└── tools
Каталог public содержит статические ресурсы приложения (CSS, JavaScript, изображения и т. д.); это корневой каталог документов веб-сервера.
Каталог src содержит исходный код PHP приложения. Каталог tests содержит набор тестов приложения.
Каталог tools содержит инструменты, например PHPUnit, упакованные в PHP-архивы.
Разумеется, вы можете вручную скачать PHP-архив PHPUnit в каталог tools:
wget -O phpunit.phar https://phar.phpunit.de/phpunit-10.phar
chmod +x phpunit.phar
mv phpunit.phar tools
Установка PHPUnit с помощью Phive
Для управления инструментами PHP-проекта, распространяемыми в виде PHAR, можно использовать Phive — среду установки и проверки PHAR.
Вот как установить Phive:
wget https://phar.io/releases/phive.phar
wget https://phar.io/releases/phive.phar.asc
gpg --keyserver hkps.pool.sks-keyservers.net --recv-keys 0x9B2D5D79
gpg --verify phive.phar.asc phive.phar
chmod +x phive.phar
mv phive.phar /usr/local/bin/phive
После установки Phive PHPUnit можно установить следующим образом:
phive install phpunit
После выполнения приведённой выше команды каталог проекта будет выглядеть так:
├── .phive
| └── phars.xml
├── public
├── src
├── tests
└── tools
└── phpunit -> ~/.phive/phars/phpunit-10.0.0.phar
Phive скачал PHP-архив PHPUnit 10.0.0, поместил его в кэш в домашнем каталоге и создал оттуда символическую ссылку на tools/phpunit.
Теперь можно запустить локальную установку PHPUnit для проекта, выполнив ./tools/phpunit:
./tools/phpunit --version
PHPUnit 10.0.0 by Sebastian Bergmann and contributors.
Файл .phive/phars.xml, созданный в корневом каталоге проекта, содержит метаданные о зависимостях инструментов проекта:
<?xml version="1.0" encoding="UTF-8"?>
<phivexmlns="https://phar.io/phive">
<pharname="phpunit"
version="^10.0"installed="10.0.0"
location="./tools/phpunit"copy="true"/>
</phive>
Файл .phive/phars.xml следует добавить в систему контроля версий.
^10.0 — это ограничение семантического версионирования: Phive всегда будет устанавливать последнюю версию PHPUnit, совместимую с PHPUnit 10.0.
Phive не только предоставляет удобный способ установки, управления и обновления инструментов, распространяемых в виде PHP-архивов. Phive также обеспечивает безопасность, автоматически проверяя PGP-подписи при скачивании файлов PHAR.
Если вы хотите хранить PHP-архив PHPUnit в системе контроля версий, используйте параметр --copy Phive, чтобы скопировать PHP-архив из кэша в домашнем каталоге в каталог инструментов проекта:
phive install --copy phpunit
После выполнения приведённой выше команды каталог проекта будет выглядеть так:
├── .phive
| └── phars.xml
├── public
├── src
├── tests
└── tools
└── phpunit
Примечание
К сожалению, PhpStorm распознаёт файл как PHP-архив только при наличии суффикса .phar. Это можно исправить, создав символическую ссылку: ln -s phpunit tools/phpunit.phar.
Обновление PHPUnit с помощью Phive
phive install phpunit добавляет зависимость от PHPUnit с ограничением версии, в котором для семантического версионирования используется оператор каретки (^): version="^10.0".
При такой конфигурации Phive всегда будет устанавливать последнюю версию PHPUnit, совместимую с PHPUnit 10.0.
Это позволяет вам «оставаться в курсе» обновлений, пока PHPUnit 10 остаётся текущей стабильной версией PHPUnit, включая новые минорные версии, такие как PHPUnit 10.1. Когда выйдет PHPUnit 11, Phive не установит его автоматически и неожиданно.
Обновление до новой минорной версии или версии с исправлениями
Рассмотрим следующую ситуацию: в файле .phive/phars.xml для PHPUnit вы используете ограничение семантического версионирования ^9.6, и у вас установлена PHPUnit 9.6.0. Сейчас ваш файл .phive/phars.xml выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<phivexmlns="https://phar.io/phive">
<pharname="phpunit"
version="^9.6"installed="9.6.0"
location="./tools/phpunit"copy="true"/>
</phive>
С момента последнего выполнения phive update стала доступна PHPUnit 9.6.3. С помощью команды phive outdated можно проверить, доступны ли обновления для PHP-архивов проекта, которыми управляет Phive:
phive outdated
Phive 0.15.2 - Copyright (C) 2015-2023 by Arne Blankerts, Sebastian Heuer and Contributors
Found 1 outdated PHARs in phive.xml:
Name Version Constraint Installed Available
phpunit ^9.6 9.6.0 9.6.3
Поскольку PHPUnit 9.6.3 — это новая версия с исправлениями (а не новая мажорная версия), phive update обновит PHPUnit с версии 9.6.0 до версии 9.6.3.
Обновление до новой мажорной версии
Рассмотрим следующую ситуацию:
<?xml version="1.0" encoding="UTF-8"?>
<phivexmlns="https://phar.io/phive">
<pharname="phpunit"
version="^9.6"installed="9.6.3"
location="./tools/phpunit"copy="true"/>
</phive>
Теперь стала доступна PHPUnit 10 — новая мажорная версия. Однако выполнение phive outdated не предложит обновление до PHPUnit 10:
phive outdated
Phive 0.15.2 - Copyright (C) 2015-2023 by Arne Blankerts, Sebastian Heuer and Contributors
Congrats, no outdated phars found
Примечание
К сожалению, вывод phive outdated сбивает с толку, если новые минорные версии или версии с исправлениями недоступны, но доступна новая мажорная версия.
Это происходит потому, что PHPUnit 10 — новая мажорная версия, а обновление до новой мажорной версии должно выполняться явно и быть результатом осознанного решения.
Если в файле .phive/phars.xml вы используете ограничения семантического версионирования (а вам следует это делать!), используйте команду install и явно укажите, что нужно установить новую мажорную версию:
phive install phpunit@^10.0
Phive 0.15.2 - Copyright (C) 2015-2024 by Arne Blankerts, Sebastian Heuer and Contributors
Linking /home/sb/.phive/phars/phpunit-10.5.15.phar to /path/to/tools/phpunit
Что находится внутри PHAR?
Чтобы избежать проблем, возникающих, когда тестируемый код использует общие с PHPUnit зависимости, но требует версии, отличающиеся от включённых в PHAR, был принят ряд мер.
Например, большинство модулей кода, включённых в дистрибутив PHPUnit в формате PHAR, в том числе все зависимости, такие как каталоги vendor, перемещаются в новое отдельное пространство имён. Это не относится к классам, входящим в публичный API PHPUnit, например PHPUnit\Framework\TestCase.
PHAR PHPUnit не использует динамическую автозагрузку для загрузки входящих в него модулей кода. Вместо этого все модули кода, включённые в PHAR, загружаются при запуске.
Подробнее об этих мерах рассказывается в этой статье.
Иногда необходимо точно знать, какие версии зависимостей PHPUnit включены в дистрибутив PHPUnit в формате PHAR, например, в контексте безопасности цепочки поставок программного обеспечения. Для этого в дистрибутиве PHPUnit в формате PHAR предусмотрены дополнительные параметры CLI, которых нет у средства запуска тестов, установленного через Composer.
Если запустить PHAR PHPUnit с параметром CLI --manifest, будет выведен текстовый манифест с информацией о версиях зависимостей PHPUnit, включённых в PHAR:
php phpunit-10.5.1.phar --manifest
phpunit/phpunit: 10.5.1
myclabs/deep-copy: 1.11.1
nikic/php-parser: v4.17.1
phar-io/manifest: 2.0.3
phar-io/version: 3.2.1
phpunit/php-code-coverage: 10.1.9
phpunit/php-file-iterator: 4.1.0
phpunit/php-invoker: 4.0.0
phpunit/php-text-template: 3.0.1
phpunit/php-timer: 6.0.0
sebastian/cli-parser: 2.0.0
sebastian/code-unit: 2.0.0
sebastian/code-unit-reverse-lookup: 3.0.0
sebastian/comparator: 5.0.1
sebastian/complexity: 3.1.0
sebastian/diff: 5.0.3
sebastian/environment: 6.0.1
sebastian/exporter: 5.1.1
sebastian/global-state: 6.0.1
sebastian/lines-of-code: 2.0.1
sebastian/object-enumerator: 5.0.0
sebastian/object-reflector: 3.0.0
sebastian/recursion-context: 5.0.0
sebastian/type: 4.0.0
sebastian/version: 4.0.1
theseer/tokenizer: 1.2.2
Если запустить PHAR PHPUnit с параметром CLI --sbom, будет выведена ведомость программного обеспечения (SBOM) в формате XML с информацией о версиях зависимостей PHPUnit, включённых в PHAR:
php phpunit-10.5.1.phar --sbom
<?xml version="1.0"?>
<bom xmlns="http://cyclonedx.org/schema/bom/1.4">
<components>
<component type="library">
<group>phpunit</group>
<name>phpunit</name>
<version>10.5.1</version>
<description>The PHP Unit Testing framework.</description>
<licenses>
<license>
<id>BSD-3-Clause</id>
</license>
</licenses>
<purl>pkg:composer/phpunit/phpunit@10.5.1</purl>
</component>
.
.
.
Если запустить PHAR PHPUnit с параметром CLI --composer-lock, будет выведен файл composer.lock, использованный для установки зависимостей PHPUnit при сборке PHAR:
php phpunit-10.5.1.phar --composer-lock
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "e06728e5442edec84af96f94a889b4a7",
.
.
.
Composer
Использование PHP-архива (PHAR) — рекомендуемый способ установки PHPUnit, но не единственный.
Вы можете добавить PHPUnit в проект в качестве зависимости для разработки с помощью Composer.
Установка PHPUnit с помощью Composer
Приведённая ниже команда предполагает, что вы уже установили Composer, а его исполняемый файл composer доступен в пути поиска $PATH. Установка Composer описана на сайте этого инструмента.
composer require --dev phpunit/phpunit
После выполнения приведённой выше команды каталог проекта будет выглядеть так:
├── composer.json
├── composer.lock
├── public
├── src
├── tests
└── vendor
Например, файл composer.json содержит метаданные о зависимостях вашего проекта. Этот файл необходимо добавить в систему контроля версий.
Файл composer.lock содержит список точных версий зависимостей, установленных Composer. Хотя технически этот файл необязателен, рекомендуется добавить его в систему контроля версий.
Локальную установку PHPUnit для проекта можно запустить так:
./vendor/bin/phpunit --version
PHPUnit 10.0.0 by Sebastian Bergmann and contributors.
Обновление PHPUnit с помощью Composer
composer require --dev phpunit/phpunit добавляет зависимость для разработки от PHPUnit с ограничением версии, в котором для семантического версионирования используется оператор каретки (^): "phpunit/phpunit": "^10.0".
При такой конфигурации Composer всегда будет устанавливать последнюю версию PHPUnit, совместимую с PHPUnit 10.0.
Это позволяет вам «оставаться в курсе» обновлений, пока PHPUnit 10 остаётся текущей стабильной версией PHPUnit, включая новые минорные версии, такие как PHPUnit 10.1. Когда выйдет PHPUnit 11, Composer не установит его автоматически и неожиданно.
Обновление до новой минорной версии или версии с исправлениями
Рассмотрим следующую ситуацию:
{
"require-dev":{
"phpunit/phpunit":"^9.6"
}
}
С помощью команды composer outdated мы можем увидеть, что в нашем проекте установлена PHPUnit 9.6.0 и доступна новая версия с исправлениями:
composer outdated --minor-only
Legend:
! patch or minor release available - update recommended
~ major release available - update possible
Direct dependencies required in composer.json:
phpunit/phpunit 9.6.0 ! 9.6.3 The PHP Unit Testing framework.
Поскольку PHPUnit 9.6.3 — это новая версия с исправлениями, composer update обновит PHPUnit с версии 9.6.0 до версии 9.6.3.
Обновление до новой мажорной версии
Рассмотрим следующую ситуацию:
{
"require-dev":{
"phpunit/phpunit":"^9.6"
}
}
С помощью команды composer outdated мы можем увидеть, что в нашем проекте установлена PHPUnit 9.6.3 и доступна новая мажорная версия:
composer outdated
Legend:
! patch or minor release available - update recommended
~ major release available - update possible
Direct dependencies required in composer.json:
phpunit/phpunit 9.6.3 ~ 10.0.7 The PHP Unit Testing framework.
Поскольку PHPUnit 10 — новая мажорная версия, composer update не обновит PHPUnit с версии 9.6.3 до версии 10.0.7. Обновление до новой мажорной версии должно выполняться явно и быть результатом осознанного решения.
Если в файле composer.json вы используете ограничения семантического версионирования (а вам следует это делать!), для перехода на новую мажорную версию вам придётся вручную изменить ограничение версии PHPUnit.
Вот что нужно сделать: отредактируйте файл composer.json проекта и замените ^9.6 на ^10.0:
{
"require-dev":{
"phpunit/phpunit":"^10.0"
}
}
Теперь можно выполнить composer update, и будет установлена новая мажорная версия.
PHAR или Composer?
Согласно собственной документации, Composer «позволяет объявлять библиотеки, от которых зависит ваш проект» и «определяет, какие версии каких пакетов можно и нужно установить, а затем устанавливает их (то есть загружает в проект)». Именно это вам нужно — и именно этого вы хотите — при работе с зависимостями проекта, необходимыми во время выполнения. Однако это не то, что нужно для зависимостей проекта, используемых при разработке, например инструментов статического анализа.
Хотя Composer позволяет отдельно объявлять зависимости, необходимые только во время разработки, и зависимости, необходимые для работы программного обеспечения, реализация такого разделения носит лишь косметический характер: все зависимости для разработки и во время выполнения разрешаются в единый устанавливаемый набор. Затем этот набор зависимостей устанавливается в один и тот же каталог vendor. Что, например, произойдёт, если инструмент, установленный с помощью Composer, требует версию библиотеки, несовместимую с версией этой библиотеки, необходимой другому инструменту или даже вашему собственному программному обеспечению? Такой конфликт невозможно разрешить, и Composer прервёт процесс установки.
Особенно неприятно в этой ситуации то, что в большинстве случаев такой конфликт необоснован. Например, инструмент статического анализа никогда не загружает и не выполняет код вашего программного обеспечения (он лишь анализирует его). Поэтому конфликтующие версии библиотеки — одна нужна вашему программному обеспечению, другая инструменту — никогда не загружаются и даже не пытаются загрузиться в одном процессе PHP. Следовательно, проблемы нет.
Это основная причина, по которой я не использую Composer для установки инструментов, а вместо этого использую PHP-архив (PHAR). Автономный PHAR инструмента гарантирует, что его зависимости не будут конфликтовать с зависимостями самого программного обеспечения.
Глобальная установка
До сих пор мы обсуждали, как устанавливать PHPUnit отдельно для каждого проекта с помощью PHP-архива (PHAR) — вручную, а также с помощью Phive — и Composer.
Для полноты картины обсудим также возможность глобальной установки PHPUnit. Под этим мы подразумеваем наличие одной глобальной установки PHPUnit, при которой инструмент командной строки phpunit находится в пути поиска $PATH и доступен во всех ваших проектах.
Обычно для глобальной установки PHPUnit скачивают выпуск PHPUnit в виде PHP-архива, делают его исполняемым и помещают в каталог $PATH:
wget -O phpunit.phar https://phar.phpunit.de/phpunit-10.phar
chmod +x phpunit.phar
sudo mv phpunit.phar /usr/local/bin/phpunit
phpunit --version
PHPUnit 10.0.0 by Sebastian Bergmann and contributors.
Для глобальной установки PHPUnit можно использовать Composer или Phive.
Использовать такую глобальную установку PHPUnit почти всегда нецелесообразно, поскольку, например, для разных проектов, над которыми вы работаете, могут требоваться разные версии PHPUnit.
Поэтому лучше устанавливать локально для каждого проекта ту версию PHPUnit, которая должна использоваться в данном проекте.
Следовательно, для установки PHPUnit не следует использовать менеджер пакетов операционной системы, поскольку это приведёт к глобальной установке PHPUnit.
Веб-сервер
PHPUnit — это среда для написания тестов и инструмент командной строки для их запуска. Написание и запуск тестов — это деятельность, связанная с разработкой. Нет причин устанавливать PHPUnit на веб-сервер.
Если вы разместили PHPUnit на веб-сервере, значит, процесс развёртывания настроен неправильно. В более общем случае, если каталог vendor общедоступен на веб-сервере, ваш процесс развёртывания также настроен неправильно.
Убедитесь, что в результате развёртывания PHPUnit и любые другие инструменты разработки не становятся общедоступными на веб-сервере.
© 2005–2026 Sebastian Bergmann
Licensed under the Creative Commons Attribution 3.0 Unported License.
https://docs.phpunit.de/en/13.2/installation.html