PHPUnit + Laravel单元测试常用技能(4)
5. 代码覆盖率
使用--coverage-html导出的报告含有类与特质覆盖率、行覆盖率
、函数与方法覆盖率。可查看当前单元测试覆盖的范围。例如输出WebDefenderTest的代码覆盖率到桌面(phpunit tests/unit/WebDefenderTest --coverage-html ~/Desktop/test)
6. 指定代码覆盖率报告要包含哪些文件
在配置文件(phpunit.xml)里设置whitelist中的processUncoveredFilesFromWhitelist=true, 设置目录用<directory>标签,设置文件用<file>标签。例如指定app/Services目录下的所有文件和app/Facades/Services/WebDefenderService.php在报告中。
示例代码:
<?xml version="1.0" encoding="UTF-8"?> <phpunit backupGlobals="false" backupStaticAttributes="false" bootstrap="tests/bootstrap.php" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false"> <testsuites> <testsuite name="Unit"> <directory suffix="Test.php">./tests/Unit</directory> </testsuite> <testsuite name="Feature"> <directory suffix="Test.php">./tests/Feature</directory> </testsuite> </testsuites> <filter> <whitelist processUncoveredFilesFromWhitelist="true"> <directory suffix=".php">./app/Services</directory> <file>./app/Facades/Services/WebDefenderService.php</file> </whitelist> </filter> <php> <server name="APP_ENV" value="local"/> <server name="BCRYPT_ROUNDS" value="4"/> <server name="CACHE_DRIVER" value="credis"/> <server name="MAIL_DRIVER" value="array"/> <server name="QUEUE_CONNECTION" value="sync"/> <server name="SESSION_DRIVER" value="array"/> <server name="APP_CONFIG_CACHE" value="bootstrap/cache/config.phpunit.php"/> <server name="APP_SERVICES_CACHE" value="bootstrap/cache/services.phpunit.php"/> <server name="APP_PACKAGES_CACHE" value="bootstrap/cache/packages.phpunit.php"/> <server name="APP_ROUTES_CACHE" value="bootstrap/cache/routes.phpunit.php"/> <server name="APP_EVENTS_CACHE" value="bootstrap/cache/events.phpunit.php"/> </php> </phpunit>
7. 参考文档
PHPUnit官方文档 https://phpunit.readthedocs.io/zh_CN/latest/index.html
反射类 https://www.php.net/manual/en/class.reflectionclass.php