东西改为文件更加通顺
梦之马
5年前
修改理由:
此投稿已在 5年前 合并。
内容修改:
Old | New | Differences |
---|---|---|
1 | ||
2 | 1 | ![file](https://iocaffcdn.phphub.org/uploads/images/201901/24/1/XHQuVn2I78.png!large) |
3 | 2 | |
4 | 3 | > 介绍 PHPUnit 测试的基础知识,使用基本的 PHPUnit 断言和 Laravel 测试助手。 | … | … |
7 | 6 | |
8 | 7 | [PHPUnit](http://phpunit.de/) 是最古老和最著名的 PHP 单元测试包之一。它主要用于单元测试,这意味着可以用尽可能小的组件测试代码,但是它也非常灵活,可以用于很多不仅仅是单元测试。 |
9 | 8 | |
10 | ||
9 | ||
11 | 10 | |
12 | 11 | PHPUnit 包含许多简单和灵活的断言允许您轻松地测试代码,当您测试特定的组件时,这些断言非常有效。但是,它确实意味着测试更高级的代码(如控制器和表单提交验证)可能会复杂得多。 |
13 | 12 | … | … |
15 | 14 | |
16 | 15 | 本教程的目的是向您介绍 PHPUnit 测试的基础知识,使用默认 PHPUnit 断言和 Laravel 测试助手。这样做的目的是在本教程结束时,您可以自信地为应用程序编写基本测试。 |
17 | 16 | |
18 | ||
17 | ||
19 | 18 | |
20 | 19 | 前提 |
21 | 20 | ------------- | … | … |
38 | 37 | |
39 | 38 | 其他安装方法也可以在 [Laravel 文档](http://laravel.com/docs/5.1/installation)中找到。 |
40 | 39 | |
41 | ||
40 | ||
42 | 41 | 创建一个新的测试 |
43 | 42 | ------------------- |
44 | 43 | |
45 | 使用 PHPUnit 的第一步是创建一个新的测试类。测试类的约定是它们存储在应用程序目录的 `./tests/` 下。在这个文件夹中,每个测试类都被命名为 `<name>Test.php` 。这种格式允许 PHPUnit 查找每个测试类---它将忽略任何不以 `Test.php` 结尾的 | |
44 | 使用 PHPUnit 的第一步是创建一个新的测试类。测试类的约定是它们存储在应用程序目录的 `./tests/` 下。在这个文件夹中,每个测试类都被命名为 `<name>Test.php` 。这种格式允许 PHPUnit 查找每个测试类---它将忽略任何不以 `Test.php` 结尾的文件。 | |
46 | 45 | |
47 | 46 | 在新的 Laravel 应用程序中,你会注意到 `./tests/` 目录中有两个文件: `ExampleTest.php` 和 `TestCase.php`. `TestCase.php` 文件是一个引导文件用于在我们的测试中设置 Laravel 环境。这允许我们在测试中使用 Laravel Facades 并为测试助手提供框架,我们将在稍后介绍。 `ExampleTest.php` 是一个示例测试类,其中包含使用应用程序测试助手的基本测试用例-暂时忽略它。 |
48 | 47 | … | … |
76 | 75 | |
77 | 76 | 这里要注意的最重要的事情是 `test` 方法名称上的前缀,与 `Test` 类名后缀一样,这样 `test` 前缀告诉 PHPUnit 在测试时运行哪些方法。如果您忘记了 `test` 前缀,那么 PHPUnit 将忽略该方法。 |
78 | 77 | |
79 | ||
78 | ||
80 | 79 | |
81 | 80 | 在我们第一次运行测试套件之前,有必要指出 Laravel 提供的默认 `phpunit.xml` 文件。 PHPUnit 在运行时会自动在当前目录中查找名为 `phpunit.xml` 或者 `phpunit.xml.dist` 的文件。您可以在此处配置测试的特定选项。 |
82 | 81 | … | … |
125 | 124 | |
126 | 125 | *注意,它会统计2个测试和3个断言,因为 `ExampleTest.php` 文件包含了一个带有两个断言的测试。我们的新基本测试包括一个单独的断言,该断言已通过。* |
127 | 126 | |
128 | ||
127 | ||
129 | 128 | |
130 | 129 | 写一个基础测试 |
131 | 130 | -------------------- | … | … |
204 | 203 | - `assertCount()` |
205 | 204 | - `assertEmpty()` |
206 | 205 | |
207 | ||
206 | ||
208 | 207 | |
209 | 208 | ### assertTrue() 和 assertFalse() |
210 | 209 | … | … |
265 | 264 | |
266 | 265 | 将其交换回来,然后重新运行 PHPUnit 。测试应该再次通过,因为我们已经修复了破损的测试。 |
267 | 266 | |
268 | ||
267 | ||
269 | 268 | |
270 | 269 | ### assertEquals() 与 assertNull() |
271 | 270 | … | … |
311 | 310 | |
312 | 311 | ``` |
313 | 312 | |
314 | ||
313 | ||
315 | 314 | ### assertContains() 和 assertCount() 以及 assertEmpty() |
316 | 315 | |
317 | 316 | 终于,我们有三个作用于数组有关的断言,我们能够使用它们去检查 `Box` 类中的 `startsWith($item)` 方法。 `assertContains()` 断言传递进来的数组中包含指定值, `assertCount()` 断言数组的项数为指定数量,`assertEmpty()` 断言传递进来的数组为空。 | … | … |
369 | 368 | |
370 | 369 | 恭喜你,你刚刚使用七个基础的 PHPUnit 断言完成了对 `Box` 类的全部测试。通过这些简单的断言你能够做许多事,对于其他断言,大多数要更复杂,不过它们仍遵循以上使用规则。 |
371 | 370 | |
372 | ||
371 | ||
373 | 372 | 测试你的程序 |
374 | 373 | ------------------------ |
375 | 374 | … | … |
403 | 402 | 如果你打开你的web浏览器,访问我们的程序(如果你没有启动你的web服务器,你可以运行 `php artisan serve` ),你应该可以在web根目录上看到屏幕上有“Laravel 5”的文本。 鉴于这个测试已经通过了PHPUnit,我们可以很确定地说我们对这个测试示例改造是正确的。 |
404 | 403 | |
405 | 404 | 这个测试确保了访问/路径,网页可以返回“'Laravel 5”的文本。一个如此简单的检查也许不代表什么,但如果你的网站上要显示关键信息,它就可以在一个别处的改动导致这个页面无法正常显示正确的信息时,防止你部署一个被损坏的程序。 |
406 | ||
405 | ||
407 | 406 | ### visit()、see() 以及 dontSee() |
408 | 407 | |
409 | 408 | 现在尝试编写自己的测试,更进一步理解它吧。 | … | … |
471 | 470 | |
472 | 471 | ``` |
473 | 472 | |
474 | ||
473 | ||
475 | 474 | ### 开发前先写测试 |
476 | 475 | |
477 | 476 | 对于测试来说,**测试驱动开发** (TDD) 是非常酷的方法,首先我们先写测试。写完测试并执行它们,你会发现测试没通过,**接下来** 我们编写满足测试的代码,再次执行测试,使测试通过。 接下来让我们开始。 | … | … |
571 | 570 | ``` |
572 | 571 | |
573 | 572 | 这样我们就通过在完成新的页面之前写测试的方式,对 **测试驱动开发** 进行了实践。 |
574 | ||
573 | ||
575 | 574 | ### click() 和 seePageIs() |
576 | 575 | |
577 | 576 | Laravel 也提供一个辅助函数 (`click()`) 允许测试点击页面中存在的连接 ,以及一个方法 (`seePageIs()`) 检查点击展示的结果页面。 | … | … |
709 | 708 | |
710 | 709 | 然而测试失败了。如果你仔细观察我们的新 HTML,你将注意到我们分别有术语 `beta` 和 `alpha` 在 `/alpha` 和 `/beta` 页面。这意味着我们需要稍微更改我们的测试让它们与误报不匹配。 |
711 | 710 | |
712 | ||
711 | ||
713 | 712 | 在每一个 `AlphaTest` 和 `BetaTest` 类,更新 `testDisplays*` 方法去使用 `dontSee('<page> page')`。通过这种方式,这将仅仅匹配字符串而不是那个术语。 |
714 | 713 | |
715 | 714 | 两个测试文件如下所示: | … | … |
762 | 761 | |
763 | 762 | 再一次运行你的测试,所有的测试都应该通过了。我们现在已经测试我们所有的新文件,包括页面中的 Next/Previous 链接。 |
764 | 763 | |
765 | ||
764 | ||
766 | 765 | 通过 Semaphore 对 PHPUnit 持续集成 |
767 | 766 | ----------------------------------------------- |
768 | 767 | … | … |
780 | 779 | |
781 | 780 | 关于 [PHP 持续集成](http://semaphoreci.com/docs/php-continuous-integration.html) 的更多信息,请参照 Semaphore 文档。 |
782 | 781 | |
783 | ||
782 | ||
784 | 783 | 结语 |
785 | 784 | ---------- |
786 | 785 |