PHPUnit9.0 安裝

2022-03-22 15:20 更新

需求

PHPUnit9.0 需要 PHP 7.3,強(qiáng)烈推薦使用最新版本的 PHP。
PHPUnit 需要使用 dom json 擴(kuò)展,它們通常是默認(rèn)啟用的。
PHPUnit 還需要 pcre、reflection spl 擴(kuò)展。這些標(biāo)準(zhǔn)擴(kuò)展默認(rèn)啟用,并且除非修改 PHP 的構(gòu)建系統(tǒng)和 C 源代碼,否則無法禁用它們。
代碼覆蓋率分析報(bào)告功能需要 Xdebug(2.7.0 或以上)和 tokenizer 擴(kuò)展。生成 XML 格式的報(bào)告需要有 xmlwriter 擴(kuò)展。

PHP 檔案包(PHAR)

要獲取 PHPUnit,最簡單的方法是下載 PHPUnit 的 PHP 檔案包(PHAR),它將 PHPUnit 所需要的所有必要組件(以及某些可選組件)捆綁在單個(gè)文件中:
要使用 PHP 檔案包(PHAR)需要有 phar 擴(kuò)展。
如果啟用了 Suhosin 擴(kuò)展,需要在 ?php.ini? 中允許執(zhí)行 PHAR:

suhosin.executor.include.whitelist = phar

可以在下載后立即使用 PHPUnit PHAR:

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

讓 PHAR 可執(zhí)行是種常見做法:

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

校驗(yàn) PHPUnit PHAR 發(fā)行包

由 PHPUnit 項(xiàng)目分發(fā)的所有官方代碼發(fā)行包都由發(fā)行包管理器進(jìn)行簽名。在 phar.phpunit.de 上有 PGP 簽名和 SHA256 散列值可用于校驗(yàn)。
下面的例子詳細(xì)說明了如何對(duì)發(fā)行包進(jìn)行校驗(yàn)。首先下載 ?phpunit.phar? 和與之對(duì)應(yīng)的單獨(dú) PGP 簽名 ?phpunit.phar.asc?:

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

用單獨(dú)的簽名(?phpunit-x.y.phar?)對(duì) PHPUnit 的 PHP 檔案包(?phpunit-x.y.phar.asc?)進(jìn)行校驗(yàn):

$ gpg phpunit-latest.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

在本地系統(tǒng)中沒有發(fā)行包管理器的公鑰(?6372C20A?)。為了能進(jìn)行校驗(yàn),必須從某個(gè)密鑰服務(wù)器上取得發(fā)行包管理器的公鑰。其中一個(gè)服務(wù)器是 ?pgp.uni-mainz.de?。所有密鑰服務(wù)器是鏈接在一起的,因此連接到任一密鑰服務(wù)器都可以。

$ 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

現(xiàn)在已經(jīng)取得了條目名稱為“?Sebastian Bergmann <sb@sebastian-bergmann.de>?”的公鑰。不過,無法檢驗(yàn)這個(gè)密鑰確實(shí)是由名叫 ?Sebastian Bergmann? 的人創(chuàng)建的。但是可以先試著校驗(yàn)發(fā)行包的簽名:為運(yùn)行的測試以 HTML 或純文本格式生成敏捷文檔

$ gpg phpunit-latest.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

此時(shí),簽名已經(jīng)沒問題了,但是這個(gè)公鑰還不能信任。簽名沒問題意味著文件未被篡改??墒怯捎诠€加密系統(tǒng)的性質(zhì),還需要再校驗(yàn)密鑰 ?6372C20A ?確實(shí)是由真正的 ?Sebastian Bergmann? 創(chuàng)建的。
任何攻擊者都能創(chuàng)建公鑰并將其上傳到公鑰服務(wù)器。他們可以建立一個(gè)帶惡意的發(fā)行包,并用這個(gè)假密鑰進(jìn)行簽名。這樣,如果嘗試對(duì)這個(gè)損壞了的發(fā)行包進(jìn)行簽名校驗(yàn),由于密鑰是“真”密鑰,校驗(yàn)將成功完成。因此,需要對(duì)這個(gè)密鑰的真實(shí)性進(jìn)行校驗(yàn)。如何對(duì)公鑰的真實(shí)性進(jìn)行校驗(yàn)已經(jīng)超出了本文檔的范疇。
用 GPG 來手工驗(yàn)證 PHPUnit PHAR 的真實(shí)性和完整性是很繁瑣的。這就是 PHAR 安裝與校驗(yàn)環(huán)境 PHIVE 創(chuàng)建的原因。你可以在其網(wǎng)站上了解 PHIVE。

Composer

如果用 ?Composer來管理項(xiàng)目的依賴關(guān)系,只要在項(xiàng)目的 ?composer.json? 文件中加上對(duì) ?phpunit/phpunit? 的(開發(fā)時(shí))依賴關(guān)系即可:

composer require --dev phpunit/phpunit ^latest

全局安裝

請(qǐng)注意,并不推薦全局安裝 PHPUnit,比如說放在? /usr/bin/phpunit? 或 ?/usr/local/bin/phpunit?
相反,PHPUnit 應(yīng)該作為項(xiàng)目本地依賴項(xiàng)進(jìn)行管理。
可以將你所需的特定 PHPUnit 版本的 PHAR 放入項(xiàng)目的 ?tools目錄(這目錄應(yīng)當(dāng)是由 PHIVE 管理的)或者,如果使用 Composer,則取決于在項(xiàng)目的 ?composer.json? 中指定的所需特定 PHPUnit 版本。

Web服務(wù)器

PHPUnit 是用于編寫測試的框架,也是用于運(yùn)行測試的命令行工具。編寫和運(yùn)行測試是開發(fā)時(shí)的活動(dòng)。沒有理由要將 PHPUnit 安裝在 Web 服務(wù)器上。
如果將 PHPUnit 上傳到 Web 服務(wù)器,則部署過程會(huì)中斷。一般而言,如果 ?vendor? 目錄在 Web 服務(wù)器上可公開訪問,則您的部署過程也會(huì)中斷。
請(qǐng)注意,如果將 PHPUnit 上傳到 Web 服務(wù)器,則可能會(huì)發(fā)生“壞事”。已經(jīng)警告過你了


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)