PHPUnit9.0 需要 PHP 7.3,強烈推薦使用最新版本的 PHP。
PHPUnit 需要使用 dom 和 json 擴展,它們通常是默認啟用的。
PHPUnit 還需要 pcre、reflection 和 spl 擴展。這些標準擴展默認啟用,并且除非修改 PHP 的構建系統(tǒng)和 C 源代碼,否則無法禁用它們。
代碼覆蓋率分析報告功能需要 Xdebug(2.7.0 或以上)和 tokenizer 擴展。生成 XML 格式的報告需要有 xmlwriter 擴展。
要獲取 PHPUnit,最簡單的方法是下載 PHPUnit 的 PHP 檔案包(PHAR),它將 PHPUnit 所需要的所有必要組件(以及某些可選組件)捆綁在單個文件中:
要使用 PHP 檔案包(PHAR)需要有 phar 擴展。
如果啟用了 Suhosin 擴展,需要在 ?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 項目分發(fā)的所有官方代碼發(fā)行包都由發(fā)行包管理器進行簽名。在 phar.phpunit.de 上有 PGP 簽名和 SHA256 散列值可用于校驗。
下面的例子詳細說明了如何對發(fā)行包進行校驗。首先下載 ?phpunit.phar
? 和與之對應的單獨 PGP 簽名 ?phpunit.phar.asc
?:
$ wget https://phar.phpunit.de/phpunit-latest.phar
$ wget https://phar.phpunit.de/phpunit-latest.phar.asc
用單獨的簽名(?phpunit-x.y.phar
?)對 PHPUnit 的 PHP 檔案包(?phpunit-x.y.phar.asc
?)進行校驗:
$ 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
?)。為了能進行校驗,必須從某個密鑰服務器上取得發(fā)行包管理器的公鑰。其中一個服務器是 ?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
現(xiàn)在已經(jīng)取得了條目名稱為“?Sebastian Bergmann <sb@sebastian-bergmann.de>
?”的公鑰。不過,無法檢驗這個密鑰確實是由名叫 ?Sebastian Bergmann
? 的人創(chuàng)建的。但是可以先試著校驗發(fā)行包的簽名:為運行的測試以 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
此時,簽名已經(jīng)沒問題了,但是這個公鑰還不能信任。簽名沒問題意味著文件未被篡改。可是由于公鑰加密系統(tǒng)的性質,還需要再校驗密鑰 ?6372C20A
?確實是由真正的 ?Sebastian Bergmann
? 創(chuàng)建的。
任何攻擊者都能創(chuàng)建公鑰并將其上傳到公鑰服務器。他們可以建立一個帶惡意的發(fā)行包,并用這個假密鑰進行簽名。這樣,如果嘗試對這個損壞了的發(fā)行包進行簽名校驗,由于密鑰是“真”密鑰,校驗將成功完成。因此,需要對這個密鑰的真實性進行校驗。如何對公鑰的真實性進行校驗已經(jīng)超出了本文檔的范疇。
用 GPG 來手工驗證 PHPUnit PHAR 的真實性和完整性是很繁瑣的。這就是 PHAR 安裝與校驗環(huán)境 PHIVE 創(chuàng)建的原因。你可以在其網(wǎng)站上了解 PHIVE。
如果用 ?Composer來管理項目的依賴關系,只要在項目的 ?composer.json
? 文件中加上對 ?phpunit/phpunit
? 的(開發(fā)時)依賴關系即可:
composer require --dev phpunit/phpunit ^latest
請注意,并不推薦全局安裝 PHPUnit,比如說放在? /usr/bin/phpunit
? 或 ?/usr/local/bin/phpunit
?
相反,PHPUnit 應該作為項目本地依賴項進行管理。
可以將你所需的特定 PHPUnit 版本的 PHAR 放入項目的 ?tools
目錄(這目錄應當是由 PHIVE 管理的)或者,如果使用 Composer,則取決于在項目的 ?composer.json
? 中指定的所需特定 PHPUnit 版本。
PHPUnit 是用于編寫測試的框架,也是用于運行測試的命令行工具。編寫和運行測試是開發(fā)時的活動。沒有理由要將 PHPUnit 安裝在 Web 服務器上。
如果將 PHPUnit 上傳到 Web 服務器,則部署過程會中斷。一般而言,如果 ?vendor
? 目錄在 Web 服務器上可公開訪問,則您的部署過程也會中斷。
請注意,如果將 PHPUnit 上傳到 Web 服務器,則可能會發(fā)生“壞事”。已經(jīng)警告過你了。
更多建議: