Vapor 教程系列 - 04 Web API 测试与稳定性验证
上一篇文章我们完成了模型关系的实现和相关 API 的开发,相信你已经掌握了如何构建具有完整数据关系的 Web API。现在我们面临一个新的挑战:如何确保这些 API 能稳定可靠地工作? 🤔 本文将带你学习如何为 TIL 应用编写和运行测试,确保代码质量和接口稳定性。
- 第一部分:构建 Web API
- 创建项目和设置数据库与路由
- 实现基本 CRUD 操作与控制器封装
- 进阶数据库模型与 API 实现
- Web API 测试与稳定性验证
- 异步编程与全面错误处理
- 第二部分:制作简单的前端网页应用
- 第三部分:数据校验、用户验证和授权
- 第四部分:Vapor 的进阶使用
- 第五部分:生产部署
上一篇文章我们完成了模型关系的实现和相关 API 的开发,相信你已经掌握了如何构建具有完整数据关系的 Web API。现在我们面临一个新的挑战:如何确保这些 API 能稳定可靠地工作? 🤔 本文将带你学习如何为 TIL 应用编写和运行测试,确保代码质量和接口稳定性。
为什么要写测试? 🎯
在开始写测试代码之前,我们先思考一个问题:为什么要写测试?想象一下以下场景:
- 你刚刚修改了一段处理用户数据的代码,但不确定是否会影响到其他功能 😰
- 你想重构某个 API 的实现,但担心会破坏现有的功能 😱
- 你的应用即将发布,需要确保所有功能都能正常工作 🚀
这些场景都需要反复测试应用的功能。如果每次都手动测试,不仅耗时而且容易遗漏。而自动化测试可以帮助我们:
- ✅ 快速验证代码修改是否影响现有功能
- 🔄 支持频繁迭代和重构
- 💪 增强代码质量和可维护性
- 📝 通过测试用例记录 API 的预期行为
配置测试环境 ⚙️
测试依赖
首先需要看一下 Package.swift 中是否添加测试所需的依赖。Vapor 提供了 XCTVapor 模块用于测试,它基于 XCTest 框架并提供了一些便捷的测试工具。打开 Package.swift,可以找到 testTarget 部分,一般不需要我们添加:
配置测试数据库
每次运行测试都需要一个干净的数据库环境。我们使用 Docker 启动一个独立的测试数据库:
其中:
vapor_username
和vapor_password
继续使用之前的即可;- 端口
5434
这个可以设置为其它,只要是端口没有被其它服务占用就好。
然后修改 configure.swift ,添加测试环境的配置:
优化测试代码结构 🏗
为了让测试代码更简洁易用,我们先创建一些辅助方法。在 Tests/AppTests 目录下创建以下文件:
Models+Testable.swift:
有了这些辅助方法,我们就可以更优雅地编写测试用例了。
编写基础的 API 测试 🧪
让我们从测试 Acronym 的基本 CRUD 操作开始。创建 Tests/AppTests/AcronymTests.swift:
有了这些辅助方法,我们就可以更优雅地编写测试用例了。
编写基础的 API 测试 🧪
让我们从测试 Acronym 的基本 CRUD 操作开始。创建 Tests/AppTests/AcronymTests.swift:
添加完代码后我们可以先运行测试一下试试效果:
- 找到编辑器——测试;
- 鼠标悬停在 AppTests,选择 Run Test 按钮。
正常的话就会看到图片右下角运行测试通过的提示文本。
测试模型关系 🔗
接下来测试模型之间的关联关系,我们这里测试的是 User 和 Acronym 的关系。在 AcronymTests 中添加:
编写单元测试其实是比较枯燥的工作,目前 AI 撰写单元测试的能力已经很强了,经过测试,完全可以帮我们撰写 Vapor 的测试代码,使用 Github Copilot Edits 或者 Cursor 的 composer 都有很棒的效果。
小结 📝
本文我们学习了:
- 为什么测试对于 Web API 开发很重要
- 如何配置测试环境和数据库
- 如何编写和组织测试代码
- 如何测试基本的 CRUD 操作
- 如何测试模型之间的关联关系
通过编写完善的测试,我们可以:
- ✅ 确保 API 功能符合预期
- 🔄 安全地重构和优化代码
- 💪 提高代码质量
- 📝 为 API 提供活的文档
记住,"测试是开发的好朋友,不是累赘。" 希望通过本文的学习,你能够建立起对测试的正确认识,并在实际开发中灵活运用测试来提升代码质量! 💪
推荐阅读
源码获取
本文代码:s1-4.zip
下一篇文章我们将一起探索异步编程与错误处理,敬请期待! 👋