Spec-Zone.ru › PHPUnit 8

Установка PHPUnit

Требования

PHPUnit 8.5 требует PHP 7.2; использование последней версии PHP настоятельно рекомендуется.

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

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

Функция отчёта о покрытии кода требует расширений Xdebug (2.7.0 или более поздних версий) и tokenizer. Генерация XML-отчётов требует расширения xmlwriter.

Архив PHP (PHAR)

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

Для использования архивов PHP (PHAR) требуется расширение phar.

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

suhosin.executor.include.whitelist = phar

Файл PHPUnit PHAR можно использовать сразу после скачивания:

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

Обычная практика — сделать PHAR исполняемым:

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

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

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

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

$ wget https://phar.phpunit.de/phpunit-8.5.phar
$ wget https://phar.phpunit.de/phpunit-8.5.phar.asc

Мы хотим проверить архив PHP (phpunit-x.y.phar) PHPUnit по его отсоединённой подписи (phpunit-x.y.phar.asc):

$ gpg phpunit-8.5.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. Серверы открытых ключей связаны друг с другом, поэтому вы должны иметь возможность подключиться к любому серверу ключей.

$ curl --silent https://sebastian-bergmann.de/gpg.asc | gpg --import
gpg: key 4AA394086372C20A: 452 signatures not checked due to missing keys
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 4AA394086372C20A: public key "Sebastian Bergmann <sb@sebastian-bergmann.de>" imported
gpg: Total number processed: 1
gpg:               imported: 1
gpg: no ultimately trusted keys found

Теперь мы получили открытый ключ для сущности «Sebastian Bergmann <sb@sebastian-bergmann.de>». Однако у нас нет способа проверить, что этот ключ был создан человеком по имени Sebastian Bergmann. Но давайте попробуем снова проверить подпись релиза.

$ gpg phpunit-8.5.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 <sb@sebastian-bergmann.de>"
gpg:                 aka "Sebastian Bergmann <sebastian@php.net>"
gpg:                 aka "Sebastian Bergmann <sebastian@thephp.cc>"
gpg:                 aka "Sebastian Bergmann <sebastian@phpunit.de>"
gpg:                 aka "Sebastian Bergmann <sebastian.bergmann@thephp.cc>"
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 был создан настоящим Sebastian Bergmann.

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

Ручная проверка подлинности и целостности PHAR PHPUnit с помощью GPG утомительна. Именно поэтому был создан PHIVE — среда для установки и проверки PHAR. Вы можете узнать о PHIVE на его сайте

Composer

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

composer require --dev phpunit/phpunit ^8.5

Глобальная установка

Обратите внимание, что установка PHPUnit глобально не рекомендуется, так как /usr/bin/phpunit или /usr/local/bin/phpunit.

Вместо этого PHPUnit следует управлять как проектной локальной зависимостью.

Либо поместите PHAR нужной версии PHPUnit в каталог tools вашего проекта (который должен управляться PHIVE), либо укажите зависимость от нужной версии PHPUnit в composer.json вашего проекта, если вы используете Composer.

Веб-сервер

PHPUnit — это фреймворк для написания и командная утилита для запуска тестов. Написание и выполнение тестов — это деятельность во время разработки. Нет причин, по которым PHPUnit должен быть установлен на веб-сервере.

Если вы загрузите PHPUnit на веб-сервер, то ваш процесс развертывания будет нарушен. Более общим образом, если ваш vendor каталог доступен для публичного доступа на вашем веб-сервере, то ваш процесс развертывания также будет нарушен.

Обратите внимание, что загрузка PHPUnit на веб-сервер может привести к нежелательным последствиям. Вы предупреждены.

© 2005–2020 Sebastian Bergmann
Licensed under the Creative Commons Attribution 3.0 Unported License.
https://phpunit.readthedocs.io/en/8.5/installation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API