避免致命的五大单元测试弊端 单元测试中最常见的方法
haoteby 2024-12-15 13:12 36 浏览
世界著名开发测试公司PRQA与Parasoft或多或少的让开发者知道了单元测试框架的概念。相对于单元测试的需求,开发者暴露出来的测试问题,总结下来可以归结五大漏洞。
1. 跟协作逻辑一起来测试算法。如果跟协作逻辑代码分离开来,那么算法逻辑是最容易测试的。否则在你的逻辑被测试之前,你就不得不先进行诸如通过任务队列提交一个任务之类的工作。 任务队列部分只会使事情变得复杂。除非你想测试任务队列本身,否则你就应当把调用run方法时所执行的逻辑剥离开来,并对它进行单独测试。那样,不论是编码还是测试都会更易于编写和管理。
2. Mock测试太多。也许单元测试的最大好处就是它迫使你编写能够独立测试的代码。也就是说,你的代码会变得模块化。当你把你要处理的对象的周围的一切都模拟了,就没有什么能迫使你去把各部分分离开来。你会发现这样写出的代码,你很难在外围添加独立的部分 – 因为所有东西都纠缠在一起。
3. 不使用断言。有时我会看到一些测试,里面创建了一个对象,调用了一些方法,然后,就没有然后了。也许它是 在循环里这样做的,而且在创建和调用上会有些差异。但是,却没有用断言来做任何检查。这就完全失去了意义 – 没有检查你的代码是否按照预期进行工作的。当然,代码是运行了,但是仅此而已。如果抛出了一个异常,我们会注意到它,但是却不会验证其它任何事情。
4. 在测试代码中遗留print语句。我把这视为手工测试的后遗症 – 你希望看到对象的值来判断它们是否正确。但是所有的检查都应当使用断言来完成。如果单元失败了,你也能看到它,因为这个测试也会失败。当测试通过时,什么 也不应当打印出来。在编写测试代码时,使用print语句有时是有用的。但是在需要用print的地方应当设置一个标志位,用来在进行测试的时候屏蔽它。
5. 查看日志信息,而不是运行结果。 还好这并不普遍,但是我却见过一个非常有能力的开发人员这么干过。要知道,真正重要的是方法的运行结果,而不是日志中都打印了什么,因为即使代码中有错误,测试也可能会通过。
从总结的五大弊端来看,有思想上的滞后,有技术上的缺陷,有人为能力的限制等,当然还有很多,这五条是最常见或最难处理的。只能根据开发团队自己内部调整,但也可以使用一定的测试工具(PRQA与Parasoft测试工具性价比非常高)。
本站文章除注明转载外,均为本站原创或翻译
相关推荐
- 如何为MySQL服务器和客户机启用SSL?
-
用户想要与MySQL服务器建立一条安全连接时,常常依赖VPN隧道或SSH隧道。不过,获得MySQL连接的另一个办法是,启用MySQL服务器上的SSL封装器(SSLwrapper)。这每一种方法各有其...
- k8s 证书问题排查_k8s dashboard 证书
-
从去年开始一些老项目上陆陆续续出现一些列的证书问题,(证书原理这里就不说了,官方文档一堆)多数刚开始的表现就是节点的kubelet服务起不来,节点状态NotReady表现日志如下failed...
- 企业级网络互通方案:云端OpenVPN+爱快路由器+Win11互联实战
-
企业级网络互通方案:OpenVPN搭建公有云+爱快路由器+Win11三地互联实战指南「安全高效」三地局域网秒变局域网实施环境说明...
- OpenV** Server/Client配置文件详解
-
Server配置详解...
- 接口基础认知:关键信息与合规前提
-
1.核心技术参数(必记)...
- S交换机通过SSH登录设备配置示例(RADIUS认证+本地认证独立)
-
说明:●本示例只介绍设备的认证相关配置,请同时确保已在RADIUS服务器上做了相关配置,如设备地址、共享密钥、创建用户等配置。●通过不同的管理域来实现RADIUS认证与本地认证两种方式同时使用,两...
- SSL证书如何去除私钥密码保护_ssl证书怎么取消
-
有时候我们在生成证书的时候可以加入了密码保护。然后申请到证书安装到了web服务器。但是这样可能会带来麻烦。每次重启apache或者nginx的时候,都需要输入密码。那么SSL证书如何去除私钥密码保护。...
- SSL证书基础知识与自签名证书生成指南
-
一、证书文件类型解析...
- S交换机通过SSH登录设备配置示例(RADIUS认证)
-
说明:本示例只介绍设备的认证相关配置,请同时确保已在RADIUS服务器上做了相关配置,如设备地址、共享密钥、创建用户等配置。假设已在RADIUS服务器上创建了用户名yc123,密码test#123。对...
- HTTPS是什么?加密原理和证书。SSL/TLS握手过程
-
秘钥的产生过程非对称加密...
- HTTPS TLS握手流程_进行tls握手
-
1.客户端向服务器发送`ClientHello`消息,包括支持的TLS版本、加密套件、随机数等信息。2.服务器收到`ClientHello`消息后,解析其中的信息,并根据配置选择一个加密套件。3....
- Spring Boot 单点登录(SSO)实现_spring boot 单点登录jwt
-
SpringBoot单点登录(SSO)实现全指南单点登录(SingleSign-On,SSO)是一种身份验证机制,允许用户使用一组凭证登录多个相关但独立的系统。在微服务架构和企业级系统中,SS...
- 源码分享:在pdf上加盖电子签章_pdf如何加盖电子公章
-
在pdf上加盖电子签章,并不是只是加个印章图片,。而是要使用一对密钥中的私钥对文件进行签字。为啥要用私钥呢?很简单,因为公钥是公开的,其他人才可以用公钥为你证明,这个文件是你签的。这就是我们常说的:私...
- 微信支付商户API证书到期 怎么更换
-
微信支付商户API证书到期更换是一个非常重要的操作,需要仔细按照流程进行。如果证书过期,所有通过API的支付、退款等操作都会失败,将直接影响您的业务。请按照以下详细步骤进行操作:重要前提:分清...