代码的可测试性

news/2025/1/21 16:15:39/文章来源:https://www.cnblogs.com/yubo-guan/p/18683731

目录
  • 单元测试
  • 可测试
  • 接口
  • 面向接口


单元测试

一个代码质量和工程质量有保证的项目一定有比较合理的单元测试覆盖率,没有单元测试的项目一定是不合格的或者不重要的,单元测试应该是所有项目都必须有的代码,每一个单元测试都表示一个可能发生的情况,单元测试就是业务逻辑。


可测试

写代码并不是一件多困难的事情,不过想要在项目中写出可以测试的代码并不容易,而优雅的代码一定是可以测试的。
如果想要想清楚什么样的才是可测试的,我们首先要知道测试是什么?测试就是控制变量,在我们隔离了待测试方法中一些依赖之后,当函数的入参确定时,就应该得到期望的返回值。

如何控制待测试方法中依赖的模块是写单元测试时至关重要的,控制依赖也就是对目标函数的依赖进行 Mock 消灭不确定性,为了减少每一个单元测试的复杂度,我们需要:

  1. 尽可能减少目标方法的依赖,让目标方法只依赖必要的模块;
  2. 依赖的模块也应该非常容易地进行 Mock;
    单元测试的执行不应该依赖于任何的外部模块,无论是调用外部的 HTTP 请求还是数据库中的数据,我们都应该想尽办法模拟可能出现的情况,因为单元测试不是集成测试的,它的运行不应该依赖除项目代码外的其他任何系统。

接口

在 Go 语言中如果我们完全不使用接口,是写不出易于测试的代码的,作为静态语言的 Go,只有我们使用接口才能脱离依赖具体实现的窘境,接口的使用能够为我们带来更清晰的抽象,帮助我们思考如何对代码进行设计,也能让我们更方便地对依赖进行 Mock。


面向接口

软件设计中经常被提到的一句话 — 『依赖接口,不要依赖实现
面向接口编程是一个老生常谈的话题,接口的作用其实就是为不同层级的模块提供了一个定义好的中间层,上游不再需要依赖下游的具体实现,充分地对上下游进行了解耦

如果一个略有规模的项目中没有出现任何 type ... interface 的定义,那么可以推测出这在很大的概率上是一个工程质量堪忧并且没有多少单元测试覆盖的项目,我们确实需要认真考虑一下如何使用接口对项目进行重构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/872854.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一镜到底,通过Llama大模型架构图看透transformers原理

想了解大模型 Llama 的工作原理?Llama Nuts and Bolts 项目不依赖外部库,通过 Go 语言从零构建 Llama 3.1 8B-Instruct 模型,为学习者提供了一个教育性深度探索,让您动手实践理解大型语言模型。一镜到底,通过Llama大模型架构图看透transformers原理 Llama Nuts and Bolts是…

深入理解视图的创建与删除:数据库管理中的高级功能

title: 深入理解视图的创建与删除:数据库管理中的高级功能 date: 2025/1/21 updated: 2025/1/21 author: cmdragon excerpt: 在现代数据库管理系统中,视图是一个重要的高级功能,可以为用户提供定制化的数据视图以满足特定需求。视图不仅能够简化复杂的查询,还能增强数据安…

域名续费只能在原平台吗

在域名管理中,续费是一个重要的环节,确保域名的持续使用和网站的稳定运行。然而,许多用户会问:“域名续费是否只能在原平台进行?”答案是:不一定。虽然域名续费通常在原注册商进行,但也可以通过其他平台完成,不过需要满足一定的条件和流程。 一、域名续费的常规操作 一…

set_multicycle_path的使用

在设计中有时会碰到部分难以优化的大块组合逻辑,例如我们这次的设计中调用了DW的浮点sqrt的IP,尽管在综合时,工具已经最大effort去简化逻辑,路径上的cell已经基本上全都ulvt了,timing仍然无法在一个周期内满足。 如果是自己设计的电路模块,这种情况下或许可以拆分流水线来…

双栈 隧道

运行模式 Dual-Stack(双栈)、Tunneling(隧道)、Translation(NAT)Dual-Stack:双栈设备同时运行IPv4和IPv6Tunneling 隧道,把IPv6的数据包封装在IPv4中隧道的起点的IPv4地址必须为手工配置,根据隧道终点的IPv4地址分为两类:

顶天立地系列之一 | 数智技术的产学研融合与行业应用高峰论坛在苏成功举办

1月15日下午,由璞华科技有限公司、武汉大学苏州研究院、苏州工业园区服务贸易协会联合主办的“数智技术的产学研融合与行业应用高峰论坛”在苏州敬斋会议中心成功召开。此次论坛旨在促进数智技术的产学研融合,探索硬核技术在行业的应用路径,吸引了众多业界专家、学者和企业代…

璞华科技携手云南白药、武汉大学运用AI打造世界级灯塔工厂

近日,璞华科技在云南白药集团携手武汉大学三方共同举办了“聚焦白药快消品基于灯塔及未来的AI探讨”技术研讨会。会议旨在通过深入探讨白药快消品行业的智能化转型、灯塔工厂的应用、AI 技术的研发与创新作用以及未来发展趋势等方面,为白药快消品行业的转型升级和可持续发展提…

Linux上使用docker部署.net8项目详细教程

在docker上部署自己的.net8 webapi,以腾迅linux云服务为例: docker的学习和具体安装可以访问官网地址:Docker官方安装教程文档网址:https://docs.docker.com/engine/install/centos/ 1.安装docker 1.1 查看docker是否已安装: 命令:docker -v 如果显示版本,说明已经安装成…

zookeeper安装部署(单节点)

环境: OS:Centos 7 zookeeper:3.8.41.获取安装介质 https://zookeeper.apache.org/releases.html#download 下载稳定版本 wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz2.安装[root@node1 /]# cd /soft[root@node1 soft]# tar -…

elasticsearch 数据同步

数据同步 elasticsearch中的酒店数据来自于mysql数据库,因此mysql数据发生改变时,elasticsearch也必须跟着改变,这个就是elasticsearch与mysql之间的数据同步。 异步通知流程如下:hotel-admin对mysql数据库数据完成增、删、改后,发送MQ消息 hotel-demo监听MQ,接收到消息后…

CSS实现各种形状

CSS3的一个非常酷的特性是允许我们创建各种规则和不规则形状的图形,从而可以减少图片的使用。以前只能在Photoshop等图像编辑软件中制作的复杂图形现在使用CSS3就可以完成了。通过使用新的CSS属性,像transform和border-radius,我们可以创建非常漂亮和复杂的图形效果。 圆形 …

如何防止网络钓鱼攻击

一、什么是网络钓鱼 ? 网络钓鱼是指试图通过操纵受害者来窃取敏感信息的行为。攻击者伪装成合法来源并发送伪装的消息,通常是通过电子邮件,希望您点击链接或打开附件。网络钓鱼者使用社会工程学并依靠人为错误来诱捕受害者。根据 AAG 最近的一项研究,钓鱼仍然是最常见的网络…