PHP TDD 测试驱动开发教程 第二部分

PHP

欢迎来到「PHP测试驱动开发」系列的第 2 部分。今天,我们将详细介绍 PHPUnit 的设置。

如果您还想观看随附的 YouTube 视频,请点击以下链接:

//链接暂无

我们将使用 Laravel 框架使我们更容易上手。它还将帮助我向您展示如何对实际应用程序进行测试。

我假设您以前使用过 Laravel 框架。这将帮助我专注于测试方面,并使本教程更易于掌握。如果您是Laravel的新手,我强烈建议您查看 杰弗瑞Laravel 从头开始 2017 系列教程。

来吧,让我们开始吧! ;)

步骤1:安装新的 Laravel 项目

您可以只运行以下命令:

composer create-project --prefer-dist laravel/laravel laravel5

其中 laravel5 是您的目标文件夹。

这个命令将为您安装最新的 Laravel 版本。

有关安装Laravel的其他方法,请查看文档: https://learnku.com/docs/laravel/5.7/installation

如果您使用的是 Linux / Mac ,则还需要将 Web 服务器用户设置存储引导/缓存目录的写入权限,通常是 (www-data) 目录。

步骤2:安装 PHPUnit

Laravel的一大优点是默认情况下已经安装了 PHPUnit 。

让我们看看在文件夹结构中默认安装了什么。

在我们的根目录中,我们有 tests 文件夹,Unit 文件夹包含默认的单元测试。正如您所猜测的,Feature 文件夹有一个默认的功能测试。特性测试基本上是我们在第 1 部分中描述的功能测试,只是命名不同。由于我们将重点放在此部分的单元测试上,因此您可以继续并删除 Feature 文件夹。

另一个重要的文件是根目录中的 phpuit.xml 文件。

此文件包含我们需要的所有 phpunit 设置。正如您可能已经注意到的那样,因为我们删除了 feature 文件夹,所以我们也可以删除 标记的内容。因此,让我们继续并删除下图中显示的部分。

现在,打开命令提示符并导航到安装文件夹,该文件夹是上面在步骤1中提到的 laravel5 文件夹。现在键入 vendor\bin\phpunit
注意:键入命令仅供参考,本教程使用的是 Windows 计算机,因此,如果计算机不同,请根据操作系统进行必要的更改。

您应该看到下面这样的内容:

注意,上面的代码并没有颜色。TDD 完全是关于红绿重构周期的,所以视觉反馈会给我们带来很长的路。我建议您使用类似 ConEmu  来获得更好的控制台模拟器。下面是 ConEmu 下的相同命令。

注意我只是使用命令 phpunit 而不是vendor\bin\phpunit。ConEmu 支持别名功能,您可以将长命令存储为短别名。

好的,我们继续。太好了,一个测试和一个断言成功运行了!这是 Laravel 附带的默认单元测试。

让我们看看它包含的内容:

单元测试的第一件事是命名空间。这是一个值得遵循的良好实践。命名空间不同的测试类型将防止命名冲突。

第一个 use 语句引用 Tests 名称空间内的 TestCase 类。在上面的代码段的第 8 行,我们可以看到它被ExampleTest 类扩展了。因此,让我们跳到这个文件,看看它有什么。

TestCase 实际上是扩展 BaseTestCase ,它具有许多辅助函数。特质 CreatesApplication 包含通过 Laravel 的 IoC 容器实例化类的代码。这些对于集成和功能测试将非常有帮助。但是由于我们目前正在进行单元测试,因此完全不需要扩展此 TestCase 文件。让我们把它保持在最低限度。我们将改为扩展 PHPUnit 的默认 TestCase 类。

回到我们的 ExampleTest 文件,我们还有另一个引用 RefreshDatabase 功能的 use 语句。对于单元测试,我们不需要它。这是因为在编写单元测试时,我们根本不与数据库进行交互。因此,让我们也删除该行。

现在,我们的 ExampleTest 文件看起来是这样的:

我们在这里看到的下一件事是方法注释。我们通常不会为测试方法编写注释。相反,我们编写注释来修改测试运行时的行为。我们现在不需要任何注释也能很好的进行测评,现在让我们也摆脱它。

现在介绍方法命名标准。这里的约定是驼峰式案例,因为它是一个简单的测试。但我鼓励您遵循一个标准。我个人使用此标准 camelCase 和 snake_case 的组合:

test_nameOfTheMethodYouAreTesting_WhenCalledWithSomeInput_ShouldReceiveSomeExpectedOutput

举个例子,它是这样的:

test_verifyUser_WhenCalledWithCorrectUserDetails_ShouldReceiveVerifiedMessage

现在我们终于看到 assertTrue 方法被调用了。断言是我们用来验证或检查我们的输出是否是我们需要的语句。这里 assertTrue 检查提供的布尔值 true 是否为 true 。由于确实是 true ;) ,因此断言通过。

assertTrue 是约 50 种断言方法中的其中一个。

点击查看 PHPUnit 官方文档的 断言 部分。

不用担心,我们不需要全部记住。实际上,在编写的大多数测试中重复使用大多数相同的测试。我们将在本系列中学习到多数常用的词汇。

我们完成了 PHPUnit 设置,并在途中了解一点关于单元测试的知识。在下一部分中,我们将学习如何模拟对象并编写真实世界的测试用例,以便让您更好的掌握该主题。

感谢您在此之前完成该主题。

哦,是的,你👏了吗?没有?那请现在就做吧。

😉也不要忘记订阅下一集。

This is how our file looks like finally:

All right, we went through the PHPUnit setup and learnt a little bit about unit testing on the way. In the next part we will learn how to mock objects and write real world test cases for you to better grasp the topic.

Thanks for making it until here. Oh yes, did you 👏yet? No? Please do it now then. 😉 Also don’t forget to subscribe for the next episode.

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://medium.com/@sameernyaupane/php-t...

译文地址:https://learnku.com/php/t/41492

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!