第 7 章 使用 BDD 和 TDD 构建解决方案代码
现在,我们已经了解了使用 测试驱动开发(TDD)和 行为驱动开发(BDD)编写测试程序的基础知识,可以开始在开发示例应用程序时使用这两种流程。在开发商业上成功的大型应用程序时,有一点是共同的:它们都需要维护。产品的功能总有改进的余地。可能会有一些遗漏的错误,更常见的情况是,会不断有更多改进产品的功能添加到应用程序中。写得不好的代码通常就是这样变得更糟的。一个写得很好的类最终可能会成为一个神类:一个只需几千行代码就能完成所有功能的类。当另一个开发人员正在使用该类时,开发人员就会开始在神类中编写额外的函数,从而改变类的行为。你可以猜到接下来会发生什么!引入一个新的错误。
在开发过程中,有很多时候,开发人员可能会开始开发一个功能,而这个功能将依赖于其他尚未编写的功能。那么,我们该如何为这类功能编写测试呢?我们需要开始模拟这些依赖关系。在本章中,我们将学习如何使用 mock
对象,并开始编写代码,以便通过遵循 SOLID 原则使代码更简洁、更易于维护。我们还将使用 "红-绿-重构" 模式来帮助我们制定需要构建的测试和功能。但在此之前,我们首先要创建一个 Behat 功能,以启动我们将要编写的所有测试和代码。
在本章中,我们将讨论以下主题:
-
实施红-绿-重构模式
-
为示例项目编写测试和解决方案代码
-
基于 Jira issue 创建 Behat 功能
-
通过 Behat 注册功能
技术要求
在本章中,建议您使用此代码存储库中的以下基本代码: https://github.com/PacktPublishing/Test-Driven-Development-with-PHP-8/tree/main/Chapter%207/base/phptdd 。完成本章后,可以在 https://github.com/PacktPublishing/Test-Driven-Developmentwith-PHP-8/tree/main/Chapter%207/complete 找到生成的解决方案代码以供参考。
准备章节的开发环境
首先,在 https://github.com/PacktPublishing/Test-Driven-Development-with-PHP-8/tree/main/Chapter%207/base 获取本章的基本代码,或者只需运行以下命令:
curl -Lo phptdd.zip "https://github.com/PacktPublishing/TestDriven-Development-with-PHP-8/raw/main/Chapter%207/base.zip" && unzip -o phptdd.zip && cd base && ./demoSetup.sh
要运行容器并执行本章中的命令,您应该位于 docker-server-web-1
容器内。
运行以下命令来确认我们的 Web 服务器的容器名称:
docker ps
要运行容器,请从主机存储库的 /docker
目录运行以下命令:
docker-compose build && docker-compose up -d
docker exec -it docker-server-web-1 /bin/bash
进入容器后,运行以下命令以通过 Composer 安装所需的库:
/var/www/html/symfony# ./setup.sh
/var/www/html/behat# ./setup.sh