通用配置
首先來看 phpunit 元素上的屬性,其中很多屬性其實都可以在執行 phpunit 命令時通過命令行參數的形式傳入,但是如果參數太多,且每次傳入參數都是一樣的,顯然配置到 phpunit.xml 中更方便,也更加易於維護,PHPUnit 執行的命令行參數可以在這里查看,或者通過 phpunit --help 在命令行查看:
backupGlobals屬性對應命令行參數里的--globals-backup,用於在每個測試中備份和恢復 PHP 超全局變量$GLOBALS,這里設置為false表示不做相應的備份和恢復操作。backupStaticAttributes屬性對應命令行參數里的static-backup,用於在每個測試中備份和恢復靜態屬性,這里設置為false表示不做相應的備份和恢復操作。bootstrap屬性對應命令行參數里面的--bootstrap <file>,用於指定測試運行前需要引入的文件,這里配置為vendor/autoload.php表示會引入 Composer 自動加載和管理的所有依賴,以便在測試文件中使用。colors屬性對應命令行參數里的--colors=<flag>,用於指示在輸出中是否用顏色進行標識。processIsolation屬性對應命令行參數里的--process-isolation,用於表示是否在隔離的 PHP 進程中執行測試。stopOnFailure屬性對應命令行參數里的--stop-on-failure,用於表示測試出錯或失敗時是否退出腳本執行,配置為false表示不退出。
接下來是一些不能通過命令行參數指定的屬性:
convertErrorsToExceptions屬性用於定義是否將 PHP ERROR 級別錯誤轉化為異常,默認會轉化為異常的錯誤類型包括:E_WARNING、E_NOTICE、E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE、E_STRICT、E_RECOVERABLE_ERROR、E_DEPRECATED、E_USER_DEPRECATED,這里將該屬性設置為true表示啟用該功能。convertNoticesToExceptions屬性用於定義是否將 PHP NOTICE 級別錯誤轉化為異常,設置為true表示會將E_NOTICE、E_USER_NOTICE、E_STRICT三種級別錯誤轉化為異常。convertWarningsToExceptions屬性用於定義是否將 PHP WARNING 級別錯誤轉化為異常,設置為true表示會將E_WARNING或E_USER_WARNING級別錯誤轉化為異常。
當然,這里只包含了 PHPUnit 所支持的 phpunit 配置的一部分屬性,更多配置請參考官方文檔 及 PHPUnit 命令行參數配置。
測試套件
定義在子元素 <testsuites> 中 Laravel 框架這樣通過 <testsuites> 配置多個 <testsuite>,這取決於項目的復雜度或者需求。
Laravel 框架默認通過 <testsuites> 定義了兩個 <testsuite>,分別是用於單元測試的 Unit 和用於功能的測試的 Feature,在它們各自的測試套件中,通過 directory 子元素指定對應測試文件所在的目錄,
並通過 suffix 屬性指定測試文件的文件名后綴,這樣,當運行 phpunit 命令時,PHPUnit 會從指定目錄下匹配指定后綴的測試文件進行測試。
whitelist
Laravel 框架還通過 <filter> 元素配置了過濾器,在該元素中我們可以通過 whitelist 子元素指定用於配置代碼覆蓋率報告分析所使用的白名單,代碼覆蓋率是代碼測試中一個很重要的概念,我們的測試代碼要盡可能覆蓋到 100% 的業務代碼,這樣的測試才有意義,而 Laravel 應用代碼都位於項目根目錄下的 app 目錄中,並且我們只測試 PHP 代碼,所以在 <whitelist> 中通過 directory 子元素做了相應的配置。
.....
