1
1
## 25. 2019-06-17-Laravel 单元测试 phpunit.xml 目录结构及测试编排文件说明
2
2
3
3
### 目录结构
4
- Laravel 框架基于 PHPUnit 提供了开箱即用的测试功能,对代码测试的支持非常有好:
4
+ ` Laravel ` 框架基于 ` PHPUnit ` 提供了开箱即用的测试功能,对代码测试的支持非常有好:
5
5
6
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
10
- Laravel测试目录结构
10
+ Laravel 测试目录结构
11
11
12
12
在该目录中包含的 Unit 和 Feature 子目录下存放的测试用例分别用于单元测试和功能测试,二者都是基于 PHPUnit 实现,对应的测试用例的根类都是 PHPUnit\Framework\TestCase。而 Broswer 目录下存放的则是基于 Laravel Dusk(底层基于 Selenium)实现的浏览器测试文件(后面我们再介绍)。
13
13
@@ -16,6 +16,7 @@ Laravel测试目录结构
16
16
### 通过 phpunit.xml 编排 PHPUnit
17
17
在上一篇 PHPUnit 入门教程中,我们已经介绍过,可以通过 XML 配置文件来编排 PHPUnit 的测试,对应的 XML 文件位于项目根目录下的 phpunit.xml,Laravel 框架已经为我们做好了如下初始化设置:
18
18
19
+ ```
19
20
<?xml version="1.0" encoding="UTF-8"?>
20
21
<phpunit backupGlobals="false"
21
22
backupStaticAttributes="false"
@@ -49,6 +50,8 @@ Laravel测试目录结构
49
50
<server name="SESSION_DRIVER" value="array"/>
50
51
</php>
51
52
</phpunit>
53
+ ```
54
+
52
55
该文件的第一行是 XML 文件的版本和编码描述信息,从第二行开始的 <phpunit > 元素则正式开始配置 PHPUnit 的核心功能,在该元素里面还嵌套定义了其它子元素,用于配置测试套件、过滤器、PHP 变量等其它信息。下面我们逐一来介绍这些元素和属性。
53
56
54
57
#### 通用配置
@@ -92,6 +95,7 @@ Laravel PHPUnit 代码覆盖率
92
95
#### PHP 变量
93
96
最后,Laravel 框架还通过 <php > 元素为我们初始化了一些 PHPUnit 测试环境下的 PHP 常量:
94
97
98
+ ```
95
99
<php>
96
100
<server name="APP_ENV" value="testing"/>
97
101
<server name="BCRYPT_ROUNDS" value="4"/>
@@ -100,14 +104,19 @@ Laravel PHPUnit 代码覆盖率
100
104
<server name="QUEUE_CONNECTION" value="sync"/>
101
105
<server name="SESSION_DRIVER" value="array"/>
102
106
</php>
107
+ ```
108
+
103
109
上述配置相当于以下 PHP 代码:
104
110
111
+ ```
105
112
$_SERVER['APP_ENV'] = 'testing';
106
113
$_SERVER['BCRYPT_ROUNDS'] = '4';
107
114
$_SERVER['CACHE_DRIVER'] = 'array';
108
115
$_SERVER['MAIL_DRIVER'] = 'array';
109
116
$_SERVER['QUEUE_CONNECTION'] = 'sync';
110
117
$_SERVER['SESSION_DRIVER'] = 'array';
118
+ ```
119
+
111
120
通过上述配置我们可以得知,在 Laravel 测试环境下,APP_ENV 的值是 testing,因此,我们可以在根目录下创建一个 .env.testing 文件作为测试环境下的环境配置文件,运行 phpunit 时实际执行的是控制台应用的 Kernel 来启动应用,这样,系统就会通过 .env.testing 读取环境配置。
112
121
113
122
缓存、邮件、会话驱动都是通过数组模拟,因而不会持久化到硬盘,此外队列驱动是 sync,表示会同步执行推送到队列的任务。
0 commit comments