通用配置
首先來看 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
子元素做了相應的配置。
.....