单元测试反模式,完整列表

我前段时间写过有关OOP中的反模式的文章 。 现在该写单元测试反模式了,因为它们也存在,并且有很多。 我将尝试在列表中包括我知道的每个示例。 如果您认识其他任何人,请通过请求请求将其添加,或在下面发表评论。 对于每个反模式,如果不是我的,我将尝试提及它的发现位置。 请记住,如果我在某处找到它,并不一定意味着它是在那发明的。 如果发现错误,请发表评论。

测试反模式

杜鹃 1 (又称陌生人3 )。 这是一种测试方法,它位于同一单元测试中,但实际上并不属于该单元测试。

按方法测试 1 。 尽管测试和生产类之间的一对一关系是一个合理的起点,但是测试和生产方法之间的一对一关系几乎总是一个坏主意。

肛门探针 2 。 必须使用不健康的方式执行其测试的测试,例如使用反射读取私有字段。

连体双胞胎 2 。 测试称为单元测试,但实际上是集成测试,因为被测系统和测试之间没有隔离。

幸福的道路 (又名对所有赔率3 ,骗子3的成功)。 这些测试始终走在快乐的道路上(即预期的结果),而无需测试边界和异常。

慢戳 3 。 运行非常慢的单元测试。 开发人员启动测试时,他们有时间去洗手间,抽烟,或者更糟糕的是,在一天结束之前回家进行测试。

巨人 3 。 尽管可以有效地测试被测对象,但它可以跨越数千行并且包含许多测试用例的单元测试。 这可以表明被测系统是上帝对象。

嘲讽 3 。 有时嘲笑会很好并且很方便。 但是有时,开发人员可能会迷失自己去模仿未经测试的内容。 在这种情况下,单元测试包含太多的模拟,存根和/或伪造品,以至于根本没有对被测系统进行测试,而是从模拟返回的数据正在被测试。

检查员 3 。 为了达到100%的代码覆盖率而违反封装的单元测试,但是对对象中发生的事情了解得非常多,以至于任何重构的尝试都会破坏现有的测试,并要求任何更改都应反映在单元测试中。

慷慨的剩菜 3 (又名链帮 , 湿地板 )。 一个实例,其中一个单元测试创​​建了保留在某处的数据,而另一个测试出于自己的vious回目的重用了数据。 如果“生成器”是随后运行的,或者根本不运行,则使用该数据的测试将完全失败。

本地英雄 3 (又名“隐藏依赖项”,“操作系统推广者”,“ 观望者” ,“ 环境破坏者” )。 为了运行,该测试用例依赖于特定于其编写的开发环境的东西。 结果是测试通过了开发箱,但在有人尝试在其他地方运行它时失败。

Nitpicker 3 。 单元测试仅在只对其中的一小部分感兴趣时才比较完整的输出,因此测试必须与其他不重要的细节保持一致。

秘密守望者 3 。 乍一看,由于没有断言,因此似乎没有进行任何测试,但是正如他们所说,“细节决定成败”。 该测试实际上是在发生事故时依赖于引发异常,并且期望测试框架捕获该异常并将其作为故障报告给用户。

道奇 3 。 单元测试具有许多针对次要(并且可能易于测试)副作用的测试,但从未测试核心所需的行为。 有时,您可能会在与数据库访问相关的测试中找到此方法,该测试中调用了一个方法,然后该测试从数据库中选择并针对结果运行断言。

劳德茅斯 3 。 单元测试(或测试套件),即使通过测试,也会通过诊断消息,日志记录和其他杂项混乱控制台。

贪婪的守望者 3 。 捕获异常并吞没堆栈跟踪的单元测试,有时将其替换为信息较少的失败消息,但有时甚至只是记录日志(请参阅Loudmouth)并通过测试。

音序器 3 。 单元测试取决于断言期间以相同顺序出现的无序列表中的项目。

枚举器 3 (又名无名测试 )。 单元测试,其中每个测试用例方法名称仅是一个枚举,例如test1test2test3 。 结果,测试用例的意图不明确,唯一可以确定的方法是阅读测试用例代码并祈求清晰。

Free Ride 3 (又名Piggyback )。 而不是编写新的测试案例方法来测试另一个功能,而是在现有测试案例中使用新的断言。

设置 3 过多 (又名Hen母亲 )。 为了进行测试,需要进行大量工作才能进行的测试。 有时,使用数百行代码来设置一个测试的环境,其中涉及多个对象,由于所有设置的“噪音”,因此很难真正确定要测试的内容。

线打手 。 乍一看,这些测试涵盖了所有内容,并且代码覆盖率工具可以100%确认它,但是实际上,这些测试只是对代码进行了编码,而没有进行任何输出分析。

四十英尺杆测试 ( 请参阅 )。 由于这些测试过于接近他们要测试的类,因此它们之间的距离很远,被无数的抽象层和他们正在检查的逻辑中的数千行代码分隔开。

有用的链接:

  1. Spock:由Rob Fletcher 主持并运行
  2. Boni Garcia的JUnit 5掌握软件测试
  3. TDD反模式 (James Carr)

翻译自: https://www.javacodegeeks.com/2018/12/unit-testing-anti-patterns-full-list.html

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

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

相关文章

功能Java示例 第6部分–用作参数

这是称为“ Functional Java by Example”的系列文章的第6部分。 我在本系列的每个部分中发展的示例是某种“提要处理程序”,用于处理文档。 在前面的部分,我们试图通过移动尽可能多的副作用,如IO,该系统的外部,以使我…

系统属性的JDK 12 Javadoc标记

JDK 12 Early Access Build 20 ( 2018/11/15 )可用,可以用来试用新的Javadoc标签{systemProperty} 。 新的{systemProperty} Javadoc标记在core-libs-dev邮件列表消息“ FYI:用于文档系统属性的新javadoc标记 ”中进行了讨论&…

功能Java示例 第5部分–将I / O移到外部

这是称为“ Functional Java by Example”的系列文章的第5部分。 在上一部分中,我们停止了对文档的变异,并返回了数据的副本。 现在,我们需要移走一些I / O。 如果您是第一次来,最好是从头开始阅读。 它有助于了解我们从何处开始…

实现打包后修改服务器接口地址,vue打包之后生成一个配置文件修改接口

我们的vue代码打包上传到服务器之后,生成一个配置文件,里面可以配置域名或其它什么字段之类的,这样以后换了域名,只修改这个配置文件即可。第一步:安装generate-asset-webpack-plugin插件npm install --save-dev gener…

我的世界无人维护的服务器,我的世界:如何进入9年无人管理的2B2T?全球最大战争服务器!...

原标题:我的世界:如何进入9年无人管理的2B2T?全球最大战争服务器!2b2t因混乱和9年无人管理而闻名于世,目前是全球最大的《我的世界》战争服务器,同时又是第二大Minecraft古老的服务器。​最近很多小伙伴都在…

集团bim对集团项目服务器,BIM再添一员,五洋建设集团BIM项目组举行成立仪式

BIM项目组的成立,标志着五洋建设集团自此迈入了可视化数字建筑信息模型的阵营,掀开了五洋建设集团设计、施工一体化服务新的一页。随后,五洋建筑设计院院长金杭杭主持召开了工作会议。金杭杭院长在致辞中表示,由建设集团技术管理中…

java pojo使用_在POJO中使用ThreadLocal进行Java嵌套事务

java pojo使用大多数嵌套事务是使用EJB实现的,现在我们尝试在POJO上实现嵌套事务。 在这里,我们使用了ThreadLocal的功能。 了解嵌套事务 事务可以嵌套在另一个内部。 因此,内部事务或外部事务可以回滚或提交,而不会影响其他事务…

Java开发人员应该知道的5大Spring Boot功能

您可能已经听说过Spring Boot,这是用不到140个字符创建一个Spring Web应用程序的神奇力量,可以在一条推文中编写这些字符,但这到底意味着什么? 哪些功能可以使Spring Boot具有如此强大的功能并使Spring应用程序开发如此容易&#…

java 使用本机代理_Java与本机代理–他们所做的强大功能

java 使用本机代理在安装代理之前应了解的内容及其对代码的影响 在构建可伸缩的服务器端应用程序时,我们花费大量时间思考如何在生产中监视,操作和更新代码。 已经开发出一种新的工具来帮助Java和Scala开发人员做到这一点。 它们中的许多都是建立在最强大…

在任何无法理解的情况下,请编写脚本

脚本编写是使您的应用程序在运行时就可以根据客户需求进行调整的最流行的方法之一。 与往常一样,此方法不仅带来好处,例如,在灵活性和可管理性之间存在众所周知的折衷方案。 本文不是从理论上讨论优缺点的文章之一,而是从实践上展…

下载anaconda时出现“Please make sure you are connected to the internet”警告

如题,在anaconda下载过程中下载VScode时出现下图的警告。 百度翻译: 顺着图中指定文件路径,找到vscode_inst.py.log文件(注:有些人ProgramData文件夹可能找不到,打开任意文件夹,点击查看&…

多个公证员提高网络吞吐量

您是否需要非常高吞吐量的Corda网络? 网络的吞吐量是否稳定? 您是否已经从其他领域挤出了所有可能的表现? 如果您对这些问题的回答是“是”,那么我可能会为您提供一些有用的信息。 我列出了这些问题,以减少您过早优化C…

初识FPGA(搬运)

原文链接1原文链接2 fpga简介 FPGA(Field-Programmable Gate Array), 即现场可编程门阵列,它是在PAL(可编程阵列逻辑)、GAL(通用阵列逻辑器件)、CPL(复杂可…

蓝桥杯小白系列之汇编点亮led灯

蓝桥杯小白系列之汇编点亮led灯 1、源代码 2、逐条分析 (1)ORG 0000H (2)START: 伪指令,编译器可识别,单片机不可识别,可以随便起。 (3)蜂鸣器设置 蓝桥板插电以后蜂鸣器常会自动响起,故在程序前提前加上如下代码,让蜂鸣器不响: mov P2,#0A0H mov P0,#000H 参照…

带有Oracle Digital Assistant和Fn Project的会话式UI。 第二部分

在上一篇文章中,我使用Oracle Digital Assistant为FlexDeploy实现了一个对话式UI。 今天,我将用Fn Flow丰富它,以便聊天机器人接受发行名称而不是ID来创建快照。 完成后,对话听起来会更加自然: … “您可以建立快照吗…

小白系列之51单片机的入门速成法

51单片机的入门速成法 01-经典51内核资源全览浓缩图 02-重要外设特殊功能寄存器概览 03-程序开发流程与设计要点 04-三大外设的开发与可重用代码 05-应用程序设计入门一例通 01-经典51内核资源全览浓缩图 <1> 四组8位并行I/O端口&#xff1a; P0端口&#xff1a;PC门&a…

蓝桥杯基础模块1:LED跑马灯

一、模块题目 二、原理简述 1、74HC138:三八译码器(3个输入,8个输出) 2、74HC573:锁存器(20个引脚,D1D8是数据输入端,Q1Q8是数据输出端&#

如何使用Hibernate将PostgreSQL枚举映射到JPA实体属性

介绍 开源的hibernate-types项目允许您映射JSON&#xff0c;ARRAY&#xff0c; YearMonth &#xff0c; Month或数据库特定的列&#xff08;例如INET地址&#xff09;。 在本文中&#xff0c;我们将看到使用JPA和Hibernate时如何将PostgreSQL Enum类型映射到Java数组。 Maven…

蓝桥杯基础模块2:蜂鸣器继电器

一、模块题目 二、原理简述 1、74HC138(参见模块1) 2、74HC02(参见模块1) 3、74HC573(参见模块1)

蓝桥杯基础模块3_1:数码管静态显示

一、模块题目 二、原理简述 1、数码管 CT107D单片机综合实训平台上使用的数码管是F3461BH(倒数第二个字母是A则共阴,是B则共阳)。 F3461BH是一个4位8段的数码管,其中a、b、c、d、e、f、g、dp引脚分别对应8个段码,该8个引脚通过74HC573锁存器与单片机的P0端口相连。另外有…