3
3
### 目录结构
4
4
` Laravel ` 框架基于 ` PHPUnit ` 提供了开箱即用的测试功能,对代码测试的支持非常有好:
5
5
6
- Laravel PHPUnit 测试
6
+ ` Laravel PHPUnit ` 测试
7
7
8
- 以 ` Laravel 5.8 ` 为例,在框架初始化过程中通过 ` Composer ` 安装了 ` PHPUnit ` 7 (也可以手动升级到 PHPUnit 8),并且在项目根目下创建了 tests 目录用于存放测试文件:
8
+ 以 ` Laravel 5.8 ` 为例,在框架初始化过程中通过 ` Composer ` 安装了 ` PHPUnit 7 ` (也可以手动升级到 ` PHPUnit 8 ` ),并且在项目根目下创建了 ` tests ` 目录用于存放测试文件:
9
9
![ ] ( https://laravelacademy.org/wp-content/uploads/2019/04/4527f09add5ed4a4007f97be975bf67d.jpg )
10
10
11
11
12
12
Laravel 测试目录结构
13
13
14
- 在该目录中包含的 Unit 和 Feature 子目录下存放的测试用例分别用于单元测试和功能测试,二者都是基于 PHPUnit 实现,对应的测试用例的根类都是 PHPUnit\Framework\TestCase。而 Broswer 目录下存放的则是基于 Laravel Dusk(底层基于 Selenium)实现的浏览器测试文件(后面我们再介绍)。
14
+ 在该目录中包含的 Unit 和 Feature 子目录下存放的测试用例分别用于单元测试和功能测试,二者都是基于 PHPUnit 实现,对应的测试用例的根类都是 ` PHPUnit\Framework\TestCase ` 。而 Broswer 目录下存放的则是基于 Laravel Dusk(底层基于 Selenium)实现的浏览器测试文件(后面我们再介绍)。
15
15
16
- 此外,在 Laravel 项目根目录下还有一个与 PHPUnit 息息县关的 phpunit.xml 文件,该文件我们在上篇教程中简单介绍过,是 PHPUnit 的编排文件,用于编排和初始化 PHPUnit 的测试行为,PHPUnit 在执行测试之前会基于这个文件进行初始化设置,你可以将其看作是 PHPUnit 的配置文件,下面我们就从这个文件为入口,分析 Laravel 框架如何集成 PHPUnit 进行单元测试和功能测试。
16
+ 此外,在 Laravel 项目根目录下还有一个与 PHPUnit 息息相关的 phpunit.xml 文件,该文件我们在上篇教程中简单介绍过,是 PHPUnit 的编排文件,用于编排和初始化 PHPUnit 的测试行为,PHPUnit 在执行测试之前会基于这个文件进行初始化设置,你可以将其看作是 PHPUnit 的配置文件,下面我们就从这个文件为入口,分析 Laravel 框架如何集成 PHPUnit 进行单元测试和功能测试。
17
17
18
18
### 通过 phpunit.xml 编排 PHPUnit
19
19
在上一篇 PHPUnit 入门教程中,我们已经介绍过,可以通过 XML 配置文件来编排 PHPUnit 的测试,对应的 XML 文件位于项目根目录下的 phpunit.xml,Laravel 框架已经为我们做好了如下初始化设置:
@@ -67,7 +67,7 @@ processIsolation 属性对应命令行参数里的 --process-isolation,用于
67
67
stopOnFailure 属性对应命令行参数里的 --stop-on-failure,用于表示测试出错或失败时是否退出脚本执行,配置为 false 表示不退出。
68
68
接下来是一些不能通过命令行参数指定的属性:
69
69
70
- 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 表示启用该功能。
70
+ ` 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 表示启用该功能。
71
71
convertNoticesToExceptions 属性用于定义是否将 PHP NOTICE 级别错误转化为异常,设置为 true 表示会将 E_NOTICE、E_USER_NOTICE、E_STRICT 三种级别错误转化为异常。
72
72
convertWarningsToExceptions 属性用于定义是否将 PHP WARNING 级别错误转化为异常,设置为 true 表示会将 E_WARNING 或 E_USER_WARNING 级别错误转化为异常。
73
73
当然,这里只包含了 PHPUnit 所支持的 phpunit 配置的一部分属性,更多配置请参考官方文档 及 PHPUnit 命令行参数配置。
@@ -81,7 +81,7 @@ Laravel 框架默认通过 <testsuites> 定义了两个 <testsuite>,分别是
81
81
82
82
![ ] ( https://laravelacademy.org/wp-content/uploads/2019/04/a1c39cb20b0dc9db1ce781110f1ac7e5.jpg )
83
83
84
- 更多测试套件的配置选项可以参考官方文档 。
84
+ 更多测试套件的配置选项可以参考 [ 官方文档 ] ( https://phpunit.readthedocs.io/zh_CN/latest/configuration.html#appendixes-configuration-testsuites ) 。
85
85
86
86
#### 过滤器
87
87
另外,Laravel 框架还通过 <filter > 元素配置了过滤器,在该元素中我们可以通过 whitelist 子元素指定用于配置代码覆盖率报告分析所使用的白名单,代码覆盖率是代码测试中一个很重要的概念,我们的测试代码要尽可能覆盖到 100% 的业务代码,这样的测试才有意义,而 Laravel 应用代码都位于项目根目录下的 app 目录中,并且我们只测试 PHP 代码,所以在 <whitelist > 中通过 directory 子元素做了相应的配置。
0 commit comments