11## 25. 2019-06-17-Laravel 单元测试 phpunit.xml 目录结构及测试编排文件说明
22
33### 目录结构
4- Laravel 框架基于 PHPUnit 提供了开箱即用的测试功能,对代码测试的支持非常有好:
4+ ` Laravel ` 框架基于 ` PHPUnit ` 提供了开箱即用的测试功能,对代码测试的支持非常有好:
55
66Laravel PHPUnit 测试
77
8- 以 Laravel 5.8 为例,在框架初始化过程中通过 Composer 安装了 PHPUnit 7(也可以手动升级到 PHPUnit 8),并且在项目根目下创建了 tests 目录用于存放测试文件:
8+ 以 ` Laravel 5.8 ` 为例,在框架初始化过程中通过 ` Composer ` 安装了 ` PHPUnit ` 7(也可以手动升级到 PHPUnit 8),并且在项目根目下创建了 tests 目录用于存放测试文件:
99
10- Laravel测试目录结构
10+ Laravel 测试目录结构
1111
1212在该目录中包含的 Unit 和 Feature 子目录下存放的测试用例分别用于单元测试和功能测试,二者都是基于 PHPUnit 实现,对应的测试用例的根类都是 PHPUnit\Framework\TestCase。而 Broswer 目录下存放的则是基于 Laravel Dusk(底层基于 Selenium)实现的浏览器测试文件(后面我们再介绍)。
1313
@@ -16,6 +16,7 @@ Laravel测试目录结构
1616### 通过 phpunit.xml 编排 PHPUnit
1717在上一篇 PHPUnit 入门教程中,我们已经介绍过,可以通过 XML 配置文件来编排 PHPUnit 的测试,对应的 XML 文件位于项目根目录下的 phpunit.xml,Laravel 框架已经为我们做好了如下初始化设置:
1818
19+ ```
1920<?xml version="1.0" encoding="UTF-8"?>
2021<phpunit backupGlobals="false"
2122 backupStaticAttributes="false"
@@ -49,6 +50,8 @@ Laravel测试目录结构
4950 <server name="SESSION_DRIVER" value="array"/>
5051 </php>
5152</phpunit>
53+ ```
54+
5255该文件的第一行是 XML 文件的版本和编码描述信息,从第二行开始的 <phpunit > 元素则正式开始配置 PHPUnit 的核心功能,在该元素里面还嵌套定义了其它子元素,用于配置测试套件、过滤器、PHP 变量等其它信息。下面我们逐一来介绍这些元素和属性。
5356
5457#### 通用配置
@@ -92,6 +95,7 @@ Laravel PHPUnit 代码覆盖率
9295#### PHP 变量
9396最后,Laravel 框架还通过 <php > 元素为我们初始化了一些 PHPUnit 测试环境下的 PHP 常量:
9497
98+ ```
9599<php>
96100 <server name="APP_ENV" value="testing"/>
97101 <server name="BCRYPT_ROUNDS" value="4"/>
@@ -100,14 +104,19 @@ Laravel PHPUnit 代码覆盖率
100104 <server name="QUEUE_CONNECTION" value="sync"/>
101105 <server name="SESSION_DRIVER" value="array"/>
102106</php>
107+ ```
108+
103109上述配置相当于以下 PHP 代码:
104110
111+ ```
105112$_SERVER['APP_ENV'] = 'testing';
106113$_SERVER['BCRYPT_ROUNDS'] = '4';
107114$_SERVER['CACHE_DRIVER'] = 'array';
108115$_SERVER['MAIL_DRIVER'] = 'array';
109116$_SERVER['QUEUE_CONNECTION'] = 'sync';
110117$_SERVER['SESSION_DRIVER'] = 'array';
118+ ```
119+
111120通过上述配置我们可以得知,在 Laravel 测试环境下,APP_ENV 的值是 testing,因此,我们可以在根目录下创建一个 .env.testing 文件作为测试环境下的环境配置文件,运行 phpunit 时实际执行的是控制台应用的 Kernel 来启动应用,这样,系统就会通过 .env.testing 读取环境配置。
112121
113122缓存、邮件、会话驱动都是通过数组模拟,因而不会持久化到硬盘,此外队列驱动是 sync,表示会同步执行推送到队列的任务。
0 commit comments