Serverless自定义运行时和单元测试(下)

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万CU 3个月
简介: Serverless自定义运行时和单元测试(下)

db和mailer初始化逻辑和依赖单独放在handler.js文件中,这个文件代码修改频率更低,这样修改后的代码就满足了准则一。

业务逻辑也不依赖任何外部服务,在单元测试时既可以使用真实的db和mailer服务,也可以模拟db和mailer服务,使单元测试简单,使得代码更易于扩展。

想将代码迁移到其他FaaS平台,不用修改业务逻辑,只需要提供handler.js。

提供一个handler.js使其适用于新的FaaS平台从而避免云厂商绑定。

需要对User类编写单元测试

首先需要选择一个测试框架,比如jest,jest可以零配置上手使用。内置的mock功能提供了完善的测试覆盖率报告等。

可以使用npm install -d jest来安装,在package.json中添加一个jest命令即可。

为了方便的管理所有测试用例,可以创建一个__test__目录,在里面新建名为users.test.js文件,用来编写Users类的测试用例。

jest默认会将test目录或包含test关键词文件当中代码用作单元测试。

https://gitee.com/pingfanrenbiji/serverless-class/tree/master/08/unit-te

Users类主要提供save方法,save方法的功能把用户信息存入数据库,然后给用户发送一封邮件,那么代码运行中可能存在这几种情况。

  • • 用户信息写入数据库成功发送邮件成功
  • • 用户信息写入数据库成功,发送邮件失败
  • • 用户信息写入数据库失败

这个时候可能感觉有到有点困难了,写数据库或发邮件都依赖远程服务,而且还要那么多异常情况来考虑,怎么进行测试呢?

对于save方法来说本质上不需要关注远程服务,只需要考虑分支逻辑的正确性。

这个地方可以对db和mailer模拟,模拟db和mailer的各自异常情况,然后观察save方法的执行结果是否正确。

FaaS提供mock功能,可以让我们对类进行模拟。

对db.saveUser和mailer.sendWelcomeEmail函数进行模拟

所以只需要对这两个函数进行模拟,当db.saveUser执行成功,发送邮件的返回值为true。

针对save方法编写第一个测试用例


覆盖率100%表示所有代码都经过了测试。

模拟业务变动的情况比如回调函数不再返回userId

这个时候就需要考虑这个变更对上下游的影响,避免造成线上业务风险,在确认没有风险之后,再去修改测试用例。

小结

  • • 为了更好的管理代码,建议单元测试目录结构和业务代码结构保持一致

  • • 将业务代码和依赖的云服务分离开来,这样才能方便测试
  • • 单元测试速度足够快,因为单元测试是用来辅助开发的,运行若是非常繁琐,运行速度慢会影响开发效率
  • • 单个测试要小于200毫秒,整个系统的测试要小于10分钟
  • • 要隔离一切外部调用,比如不能读磁盘、不能有网络调用,不能写数据库,不能依赖环境变量,不能依赖系统时间
  • • 必要时需要对外部进行模拟,用来确保单元测试不会对外部环境有所影响。由于模拟外部aip可能导致内部代码行为发生改变,所以要按照最新的外部api描述进行模拟
  • • 单一职责,一个测试用例只用来验证一个行为
  • • 单元测试代码是最好的文档和描述,因此单元测试需要明确代码的意图。好的单元测试应该是自描述的能对代码进行解释说明
  • • 单元测试并不是测试的全部,这是用来保证单个功能、组件的正确性,在Serverless中依旧使用集成测试来验证所有的组件集成在一起时运行是否正常。在设计和编写业务代码的时候需要考虑代码是否有利于测试,在这个基础之上,业务代码的单元测试和传统的应用单元测试的方法是互通的。
  • • Serverless应用由于其分布式、依赖云服务、事件驱动等特性导致编写单元测试很困难,为了方便编写单元测试,需要将业务逻辑和依赖的云服务分离开来
  • • 编写单元测试时,需要考虑速度、隔离性、单一职责等因素避免单元测试称为开发的负担



相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
3月前
|
测试技术 Android开发 Python
探索软件测试的艺术:从基础到高级安卓应用开发中的自定义视图
【8月更文挑战第29天】在软件开发的世界中,测试是不可或缺的一环。它如同艺术一般,需要精细的技巧和深厚的知识。本文旨在通过浅显易懂的语言,引领读者从软件测试的基础出发,逐步深入到更复杂的测试策略和工具的使用,最终达到能够独立进行高效测试的水平。我们将一起探索如何通过不同的测试方法来确保软件的质量和性能,就像艺术家通过不同的色彩和笔触来完成一幅画作一样。
|
3月前
|
运维 负载均衡 Serverless
函数计算产品使用问题之在同一地域同一时刻最多可以同时运行多少个函数实例
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
1月前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
486 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
1月前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
212 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
1月前
|
机器学习/深度学习 算法 PyTorch
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-7.0版本进行目标检测的完整流程,包括算法介绍、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。YOLOv5以其高精度、快速度和模型小尺寸在计算机视觉领域受到广泛应用。
523 0
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
|
1月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
23 0
|
3月前
|
存储 缓存 监控
函数计算产品使用问题之调用sd生图时,怎么保证高并发场景正常运行
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
运维 Serverless 调度
函数计算产品使用问题之怎么在HTTP触发的函数里添加或读取自定义头部
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
20天前
|
测试技术 开发者 UED
探索软件测试的深度:从单元测试到自动化测试
【10月更文挑战第30天】在软件开发的世界中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的不同层次,从基本的单元测试到复杂的自动化测试,揭示它们如何共同构建一个坚实的质量保证体系。我们将通过实际代码示例,展示如何在开发过程中实施有效的测试策略,以确保软件的稳定性和可靠性。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
3月前
|
JSON Dubbo 测试技术
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
58 2
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决

热门文章

最新文章

相关产品

  • 函数计算
  • 下一篇
    无影云桌面