Skip to content

Commit 449b390

Browse files
committed
docs: PHPUnit 的单元测试
1 parent 6c8fbc1 commit 449b390

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

laravel/readme/25. 2019-06-10-Laravel 基于 PHPUnit 的单元测试.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
## 25. 2019-06-10-Laravel 基于 PHPUnit 的单元测试
22

33
### 简介
4-
介绍完 PHPUnit 的基本使用和 Laravel 框架自带的编排文件 phpunit.xml 文件,今天开始我们正式准备在 Laravel 项目中基于 PHPUnit 编写单元测试和功能测试,通过上篇教程介绍的编排文件我们知道,Laravel 的单元测试用例位于 tests/Unit 目录下,框架本身也为我们提供了一个示例测试文件 ExampleTest.php:
4+
介绍完 `PHPUnit` 的基本使用和 `Laravel` 框架自带的编排文件 `phpunit.xml` 文件,今天开始我们正式准备在 `Laravel` 项目中基于 `PHPUnit` 编写单元测试和功能测试,通过上篇教程介绍的编排文件我们知道,`Laravel` 的单元测试用例位于 `tests/Unit` 目录下,框架本身也为我们提供了一个示例测试文件 `ExampleTest.php`
55

66
```php
77
<?php
@@ -25,12 +25,12 @@ class ExampleTest extends TestCase
2525
}
2626
```
2727

28-
其中包含了一行最基本的断言测试,用于判断指定的参数是否为真,并且这个测试永远是通过的。Laravel 的单元测试其实是原原本本继承了 PHPUnit 的单元测试功能,这里的父类 Tests\TestCase 从根源上继承自 PHPUnit\Framework\TestCase,所以我们可以在测试用例中使用所有 PHPUnit 支持的断言方法和测试注解。
28+
其中包含了一行最基本的断言测试,用于判断指定的参数是否为真,并且这个测试永远是通过的。`Laravel` 的单元测试其实是原原本本继承了 `PHPUnit` 的单元测试功能,这里的父类 `Tests\TestCase` 从根源上继承自 `PHPUnit\Framework\TestCase`,所以我们可以在测试用例中使用所有 `PHPUnit` 支持的断言方法和测试注解。
2929

30-
下面我们通过几个常见的场景介绍下如何基于 PHPUnit 编写单元测试。
30+
下面我们通过几个常见的场景介绍下如何基于 `PHPUnit` 编写单元测试。
3131

3232
### 对变量进行测试
33-
PHPUnit 底层提供了很多断言方法用于对变量进行测试,这些变量通常是业务代码类方法或函数的返回值,我们在 Unit\ExampleTest 中新增一个 testVariables 方法:
33+
`PHPUnit` 底层提供了很多断言方法用于对变量进行测试,这些变量通常是业务代码类方法或函数的返回值,我们在 `Unit\ExampleTest` 中新增一个 `testVariables` 方法:
3434

3535
```
3636
public function testVariables()
@@ -55,14 +55,14 @@ public function testVariables()
5555
}
5656
```
5757

58-
相应的断言用途在注释中已经说明了,我们可以对各种类型的变量从各种维度进行断言,甚至还可以对文件、目录、正则表达式进行断言,并且很多断言都可以从正反两个方法进行,相关的调用都很简单,你可以在需要的时候查看官方文档选择相应的断言方法:https://phpunit.readthedocs.io/zh_CN/latest/assertions.html。
58+
相应的断言用途在注释中已经说明了,我们可以对各种类型的变量从各种维度进行断言,甚至还可以对文件、目录、正则表达式进行断言,并且很多断言都可以从正反两个方法进行,相关的调用都很简单,你可以在需要的时候查看官方文档选择相应的断言方法:[https://phpunit.readthedocs.io/zh_CN/latest/assertions.html](https://phpunit.readthedocs.io/zh_CN/latest/assertions.html)
5959

60-
运行上面的测试用例,结果如下,每个测试方法都代表一个测试用例,所以上面的单元测试包含两个测试用例,7个断言
60+
运行上面的测试用例,结果如下,每个测试方法都代表一个测试用例,所以上面的单元测试包含两个测试用例,7 个断言
6161

6262

6363

6464
### 对输出进行测试
65-
除了对变量进行测试外,还可以对页面输出进行测试,这可以通过 PHPUnit 提供的 expectOutputString 方法来实现:
65+
除了对变量进行测试外,还可以对页面输出进行测试,这可以通过 `PHPUnit` 提供的 `expectOutputString` 方法来实现:
6666

6767
```
6868
public function testOutput()
@@ -86,7 +86,7 @@ public function testOutputRegex()
8686

8787

8888
### 对异常进行测试
89-
类似的,还可以通过 expectException 方法对异常进行测试,为了让测试用例更加符合真实场景,我们在 app 目录下新增一个 Services 子目录,然后在该子目录下创建一个 TestService 类并初始化代码如下:
89+
类似的,还可以通过 `expectException` 方法对异常进行测试,为了让测试用例更加符合真实场景,我们在 `app` 目录下新增一个 `Services` 子目录,然后在该子目录下创建一个 `TestService` 类并初始化代码如下:
9090

9191
```
9292
<?php
@@ -100,7 +100,7 @@ class TestService
100100
}
101101
}
102102
```
103-
然后回到 Unit\ExampleTest,编写一个新的测试用例如下:
103+
然后回到 `Unit\ExampleTest`,编写一个新的测试用例如下:
104104

105105
```
106106
public function testException()
@@ -120,7 +120,7 @@ public function testException()
120120
$this->expectException(\Exception::class);
121121
```
122122

123-
除此之外,还可以进一步对异常明细进行测试,比如通过 expectExceptionCode()expectExceptionMessage() 和 expectExceptionMessageRegExp() 方法可以用于测试异常码、异常信息。
123+
除此之外,还可以进一步对异常明细进行测试,比如通过 `expectExceptionCode()``expectExceptionMessage()``expectExceptionMessageRegExp()` 方法可以用于测试异常码、异常信息。
124124

125125
除了通过上述方法,还可以通过注解对异常进行测试,这种方式更加方便:
126126

@@ -134,7 +134,7 @@ public function testExceptionAnnotation()
134134
}
135135
```
136136

137-
由于两个测试用例中都用到了 TestService,所以我们将其在 setUp 方法进行初始化:
137+
由于两个测试用例中都用到了 `TestService`,所以我们将其在 `setUp` 方法进行初始化:
138138

139139
```
140140
/**
@@ -154,7 +154,7 @@ protected function setUp(): void
154154

155155

156156
### 对错误进行测试
157-
默认情况下,PHPUnit 会将 PHP 错误、警告和通知都转化为异常,在上一篇 PHP 编排文件 phpunit.xml 中我们提到,Laravel 也默认配置为做这些转化,所以我们可以通过测试异常的方式对业务代码中的错误进行测试。具体用法和异常测试一样,就不再赘述了。
157+
默认情况下,`PHPUnit` 会将 `PHP` 错误、警告和通知都转化为异常,在上一篇 PHP 编排文件 phpunit.xml 中我们提到,Laravel 也默认配置为做这些转化,所以我们可以通过测试异常的方式对业务代码中的错误进行测试。具体用法和异常测试一样,就不再赘述了。
158158

159159
### 测试的依赖关系
160160
有的时候,我们需要测试的两个用例之间可能有依赖关系,比如我们在 TestService 定义如下个方法:

0 commit comments

Comments
 (0)