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ò)展。
要獲取 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.
由 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來管理項(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 版本。
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)警告過你了。
更多建議: