第 5 章 单元测试
试想一下,在没有任何自动化测试的情况下,与其他几位开发人员一起开发一个项目,而生产中似乎一切正常。然后,发现了一个错误,其中一名开发人员修复了这个错误。质量保证部门批准了修复,然后将其推向生产。几天后,生产部门又报告了一个错误。经过调查,开发人员发现新的错误是在修复另一个错误时引入的。听起来是不是很熟悉?
代码库中的一个小改动就能轻易改变软件的行为。一个小数点的变化就可能导致价值数百万美元的错误计算。试想一下,将所有这些计算检查交给质量保证部门进行人工测试—每次代码库更新时,他们都必须运行这些检查。这种做法效率低、压力大,而且难以为继。
单元测试是解决这一反复出现的问题的方法之一。编写单元测试程序可以帮助我们开发人员验证自己的程序是否正确。通过反复运行单元测试,如果我们破坏了其他现有测试,我们也能在开发过程中及早发现问题。如果我们不小心改变了某个函数的预期行为,而我们之前已经为这个函数编写了正确的单元测试,那么我们就可以确信我们会破坏这些测试。对我来说,这一点非常重要。我想知道,如果我破坏了什么,在我确信我没有破坏任何现有的单元测试之前,我不会将我的代码推送给质量保证或测试部门进行最终验证。对于大型产品来说,即使有自动化的端到端测试和用户界面到后台测试,这也能为质量保证或测试部门节省大量工时。
本章还将讨论不同类型的测试,但单元测试是其他自动化测试类型的基础。
在本章中,我们将讨论以下主题:
-
定义单元测试
-
编写和运行单元测试
-
设置测试覆盖率监控
-
有哪些不同类型的测试?
-
在集成测试中使用依赖注入和 mock
技术要求
本章要求您拥有我们之前构建的所有容器,以及 第 3 章 "使用 Docker 容器设置开发环境" 中定义的 PHPStorm IDE 配置。您只需从 GitHub 下载开发环境设置,然后按照 第 3 章 使用 Docker 容器设置开发环境 中提到的说明进行操作即可: https://github.com/PacktPublishing/Test-Driven-Developmentwith-PHP-8/tree/main/Chapter%203 。
在本章中,还要求你了解如何使用对象关系映射器(ORM),作者假设你有使用 MySQL 数据库的经验。
此外,还需要熟悉 PSR-11 和服务容器的使用。有关 PSR-11 的更多信息,请访问 https://www.php-fig.org/psr/psr-11/ 。
与本章相关的所有代码文件,请访问 https://github.com/PacktPublishing/Test-Driven-Development-with-PHP-8/tree/main/Chapter%203 。
准备章节的开发环境
首先,获取第 5 章的基本代码,可在 https://github.com/PacktPublishing/Test-Driven-Development-with-PHP-8/tree/main/Chapter%203 找到,或者只需运行以下命令:
curl -Lo phptdd.zip "https://github.com/PacktPublishing/TestDriven-Development-with-PHP-8/raw/main/Chapter%205/base.zip" && unzip -o phptdd.zip && cd base && ./demoSetup.sh
要运行容器并执行本章中的命令,读者应该在
docker-server-web-1 container.
要运行容器并执行本章中的命令,您应该位于 docker-server-web-1
容器内。
运行以下命令来确认我们的 Web 服务器的容器名称:
docker ps
要运行容器,请从主机存储库的 /phptdd/docker
目录运行以下命令:
docker-compose build && docker-compose up -d
docker exec -it docker_server-web_1 /bin/bash
进入容器后,运行以下命令来安装 Composer
所需的库:
/var/www/html/symfony# ./setup.sh