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