梦之马 5年前

修改理由:

东西改为文件更加通顺

此投稿已在 5年前 合并。

内容修改:

红色背景 为原始内容

绿色背景 为新增或者修改的内容

OldNewDifferences
1  
21![file](https://iocaffcdn.phphub.org/uploads/images/201901/24/1/XHQuVn2I78.png!large)
32
43> 介绍 PHPUnit 测试的基础知识,使用基本的 PHPUnit 断言和 Laravel 测试助手。
 
76
87[PHPUnit](http://phpunit.de/) 是最古老和最著名的 PHP 单元测试包之一。它主要用于单元测试,这意味着可以用尽可能小的组件测试代码,但是它也非常灵活,可以用于很多不仅仅是单元测试。
98
10 
 9
1110
1211PHPUnit 包含许多简单和灵活的断言允许您轻松地测试代码,当您测试特定的组件时,这些断言非常有效。但是,它确实意味着测试更高级的代码(如控制器和表单提交验证)可能会复杂得多。
1312
 
1514
1615本教程的目的是向您介绍 PHPUnit 测试的基础知识,使用默认 PHPUnit 断言和 Laravel 测试助手。这样做的目的是在本教程结束时,您可以自信地为应用程序编写基本测试。
1716
18 
 17
1918
2019前提
2120-------------
 
3837
3938其他安装方法也可以在 [Laravel 文档](http://laravel.com/docs/5.1/installation)中找到。
4039
41 
 40
4241创建一个新的测试
4342-------------------
4443
45 使用 PHPUnit 的第一步是创建一个新的测试类。测试类的约定是它们存储在应用程序目录的 `./tests/` 下。在这个文件夹中,每个测试类都被命名为 `<name>Test.php` 。这种格式允许 PHPUnit 查找每个测试类---它将忽略任何不以 `Test.php` 结尾的东西
 44使用 PHPUnit 的第一步是创建一个新的测试类。测试类的约定是它们存储在应用程序目录的 `./tests/` 下。在这个文件夹中,每个测试类都被命名为 `<name>Test.php` 。这种格式允许 PHPUnit 查找每个测试类---它将忽略任何不以 `Test.php` 结尾的文件
4645
4746在新的 Laravel 应用程序中,你会注意到 `./tests/` 目录中有两个文件:  `ExampleTest.php` 和 `TestCase.php`.  `TestCase.php` 文件是一个引导文件用于在我们的测试中设置 Laravel 环境。这允许我们在测试中使用 Laravel Facades 并为测试助手提供框架,我们将在稍后介绍。 `ExampleTest.php` 是一个示例测试类,其中包含使用应用程序测试助手的基本测试用例-暂时忽略它。
4847
 
7675
7776这里要注意的最重要的事情是 `test` 方法名称上的前缀,与 `Test` 类名后缀一样,这样 `test` 前缀告诉 PHPUnit 在测试时运行哪些方法。如果您忘记了 `test` 前缀,那么 PHPUnit 将忽略该方法。
7877
79 
 78
8079
8180在我们第一次运行测试套件之前,有必要指出 Laravel 提供的默认 `phpunit.xml` 文件。 PHPUnit 在运行时会自动在当前目录中查找名为 `phpunit.xml` 或者 `phpunit.xml.dist` 的文件。您可以在此处配置测试的特定选项。
8281
 
125124
126125*注意,它会统计2个测试和3个断言,因为 `ExampleTest.php` 文件包含了一个带有两个断言的测试。我们的新基本测试包括一个单独的断言,该断言已通过。*
127126
128 
 127
129128
130129写一个基础测试
131130--------------------
 
204203-  `assertCount()`
205204-  `assertEmpty()`
206205
207 
 206
208207
209208### assertTrue() 和 assertFalse()
210209
 
265264
266265将其交换回来,然后重新运行 PHPUnit 。测试应该再次通过,因为我们已经修复了破损的测试。
267266
268 
 267
269268
270269### assertEquals() 与 assertNull()
271270
 
311310
312311```
313312
314 
 313
315314### assertContains() 和 assertCount() 以及 assertEmpty()
316315
317316终于,我们有三个作用于数组有关的断言,我们能够使用它们去检查 `Box` 类中的  `startsWith($item)` 方法。 `assertContains()` 断言传递进来的数组中包含指定值, `assertCount()` 断言数组的项数为指定数量,`assertEmpty()` 断言传递进来的数组为空。
 
369368
370369恭喜你,你刚刚使用七个基础的 PHPUnit 断言完成了对 `Box` 类的全部测试。通过这些简单的断言你能够做许多事,对于其他断言,大多数要更复杂,不过它们仍遵循以上使用规则。
371370
372 
 371
373372测试你的程序
374373------------------------
375374
 
403402如果你打开你的web浏览器,访问我们的程序(如果你没有启动你的web服务器,你可以运行 `php artisan serve` ),你应该可以在web根目录上看到屏幕上有“Laravel 5”的文本。 鉴于这个测试已经通过了PHPUnit,我们可以很确定地说我们对这个测试示例改造是正确的。
404403
405404这个测试确保了访问/路径,网页可以返回“'Laravel 5”的文本。一个如此简单的检查也许不代表什么,但如果你的网站上要显示关键信息,它就可以在一个别处的改动导致这个页面无法正常显示正确的信息时,防止你部署一个被损坏的程序。
406 
 405
407406### visit()、see() 以及 dontSee()
408407
409408现在尝试编写自己的测试,更进一步理解它吧。
 
471470
472471```
473472
474 
 473
475474### 开发前先写测试
476475
477476对于测试来说,**测试驱动开发** (TDD) 是非常酷的方法,首先我们先写测试。写完测试并执行它们,你会发现测试没通过,**接下来** 我们编写满足测试的代码,再次执行测试,使测试通过。 接下来让我们开始。
 
571570```
572571
573572这样我们就通过在完成新的页面之前写测试的方式,对 **测试驱动开发** 进行了实践。
574 
 573
575574### click() 和 seePageIs()
576575
577576Laravel 也提供一个辅助函数 (`click()`) 允许测试点击页面中存在的连接 ,以及一个方法 (`seePageIs()`) 检查点击展示的结果页面。
 
709708
710709然而测试失败了。如果你仔细观察我们的新 HTML,你将注意到我们分别有术语 `beta` 和 `alpha` 在 `/alpha` 和 `/beta` 页面。这意味着我们需要稍微更改我们的测试让它们与误报不匹配。
711710
712 
 711
713712在每一个 `AlphaTest` 和 `BetaTest` 类,更新 `testDisplays*` 方法去使用 `dontSee('<page> page')`。通过这种方式,这将仅仅匹配字符串而不是那个术语。
714713
715714两个测试文件如下所示:
 
762761
763762再一次运行你的测试,所有的测试都应该通过了。我们现在已经测试我们所有的新文件,包括页面中的 Next/Previous 链接。
764763
765 
 764
766765通过 Semaphore 对 PHPUnit 持续集成
767766-----------------------------------------------
768767
 
780779
781780关于 [PHP 持续集成](http://semaphoreci.com/docs/php-continuous-integration.html) 的更多信息,请参照 Semaphore 文档。
782781
783 
 782
784783结语
785784----------
786785