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