使用Mocks进行需求驱动的软件开发

jmock作者撰写的有关模拟框架的优秀论文 。 本文写于18年前的2004年,但其中有许多构建可维护软件系统的技巧。

在这篇文章中,我将重点介绍本文中的关键思想,但建议您阅读本文,以获取有关模拟和编程实践的重要思想。

模拟对象是测试驱动开发的扩展。

当我们开始考虑首先编写测试时,模拟对象可能会很有用,因为这可以模拟仍未开发的零件。 认为是构建原型系统的更好方法。

模拟对象作为一种将测试与第三方库隔离的技术不太有趣。

这是关于模拟的常见误解,我已经使用模拟看到/编写了许多代码。 这确实是来自模拟框架作者的大开眼界的事实。

写作测试是设计活动

确实如此,但是作为工程师,我们花了很多时间放弃编写测试的最佳部分。 由测试驱动的设计还提供了有关实际问题的见解,并导致了
发明,因为开发人员必须认真考虑问题并避免过度设计

耦合与内聚

当我们开始接线测试时,它为我们做出的耦合和内聚决策提供了很好的思路。 好的软件将具有低耦合和高凝聚力。 这也导致任务的功能分解。

井设计系统的另一个好处是它没有Law_of_Demeter ,这是不经意间引入系统的常见问题之一。 许多微服务都遭受这种反模式的困扰。

需要驱动的发展

由于模拟需要显式的代码/设置,因此它来自测试用例的需求/需求。 您不必根据预测会在6个月后需要某些功能进行编码,因此可以专注于客户需求。 测试结果产生的所有接口都狭窄且适合目的。 这种类型的开发也称为自顶向下开发。

纸报价

“”” 我们发现,需求驱动的开发有助于我们专注于手头的需求并开发一致的对象。 “””

按组成编程

测试优先方法允许您考虑组件的可组合性,每件事都作为构造函数参数或方法参数传递。

一旦使用这样的设计原理构建系统,就很容易测试/更换系统的一部分。 模拟对象允许考虑可组合性,以便模拟系统的某些部分。

模拟测试变得太复杂

论文中的一项观察谈到了模拟测试的复杂性。 如果系统设计薄弱,那么模拟将变得困难而复杂。 它确实放大了问题,例如耦合,关注点分离。 我认为这是最好的使用模拟对象来获取设计反馈并像激励器一样使用它来使系统变得更好的方法。

不要在模拟中添加行为

根据论文,我们绝不应在存根中添加行为,以防万一您有被诱惑这样做的可能,这表明责任错位了。

如果您喜欢该职位,那么您可以在Twitter上关注我,以获取有关我撰写的随机内容的通知。

翻译自: https://www.javacodegeeks.com/2019/08/need-driven-software-development-using-mocks.html

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

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

相关文章

W10关闭警告声音

点击电脑左下角的“开始”按钮 在开始菜单中点击打开“设置” 在设置窗口中点击“个性化” 在轻松使用界面左侧点击“主题” 接着在右侧找到并点击“声音” 在弹出的窗口中点击“声音方案”下面的方框 在弹出的列表中选择“无声”,点击底部的“应用”和…

【sublime】 按 ctrl+shift+f没有反应(系统:win10+搜狗输入法)

系统: win10 输入法: 搜狗 问题: sublime 按 ctrlshiftf没有反应 原因: sumlime 中 ctrlshiftf 与搜狗繁简切换冲突 解决: A. 右击搜狗输入法状态栏(就是那个小条条),选择属性设…

javaone_JavaOne 2014 –有关提交的一些初步分析

javaone这些天时间不多了。 并行发生的事情如此之多,当然,最重要的Java会议就是一切。 JavaOne 2014已经关闭了CfP门,投票正在进行中。 程序委员会几乎没有什么可以谈论的,但是去年跳过了这种分析之后,现在是我寻求许…

修改Typora默认的字体为好看秀美的中文字体“华康手札体“

一 下载并安装"华康手札体W5P"字体 (1)下载方式: 1. 方式一 http://www.downcc.com/font/341067.html2.百度云链接: 链接:https://pan.baidu.com/s/125Hh-tqWOy1Ht-GvD_P2MQ 提取码:z6ka 复制…

Onetab快速删除所有历史网页

1. 打开网页的控制台(F12) 2. 控制台粘贴该命令 document.querySelectorAll(div.deleteAllButton).forEach(function(ele, index, list){ele.click();});3. 然后按住回车(有 conform 弹框需要确认),等待全部清空

golang的jwt学习笔记

文章目录 初始化项目加密一步一步编写程序另一个参数--加密方式关于StandardClaims 解密解析出来的怎么用关于`MapClaims`上面使用结构体的全代码实战项目关于验证这个项目的前端初始化项目 自然第一步是暗转jwt-go的依赖啦 #go get github.com/golang-jwt/jwt/v5 go get githu…

好用的截图工具

目录 截图软件介绍 神器2——Snipaste PicPick——自带画图 LightShot——自带图床 功能总结 截图软件介绍 参考推荐5个截图工具(超好用) - 知乎,列出几个好用的截图工具 神器2——Snipaste 超级好用,QQ的功能Snipaste全都有…

如何在Flutter(REST API)中进行API调用

在本文中,我们将探讨如何在波动中进行API调用并使用简单的REST API。 在这里查看我在Flutter上的其他一些帖子: Flutter vs React Native 了解Flutter中的BLoC架构 (强烈建议) 在Flutter中构建ListView(RecyclerVi…

sublime关闭左边文件路径快捷键

目录 背景 解决方法 方案一: 方案二: 背景 sublime查看某一文件具体内容,左边文件路径占用一部分空间,影响观看 解决方法 方案一: 使用快捷键:关闭和打开相同,先按 CtrlK,再按…

Typora全局搜素

目录 背景 解决方式 全局文件夹下搜索 方法一 方法二 单一文件下搜索 查找功能 1 查找整个单词 ​2 区分大小写 背景 有时需要在打开的文件夹中所有文件搜索某一单词,有时需要在一个文件下搜索 解决方式 全局文件夹下搜索 方法一 方法二 快捷键&#x…

linux 内存不足杀进程_内存不足:杀死进程或牺牲孩子

linux 内存不足杀进程现在是早上六点。 我清醒地总结了导致我太早唤醒电话的事件顺序。 这些故事开始时,我的电话警报响了。 困倦而脾气暴躁的我检查了电话,看我是否真的疯了以至于无法在凌晨5点设置唤醒警报。 不,这是我们的监视系统&#x…

为什么声明性编码使您成为更好的程序员

在许多情况下,具有功能组成的声明式解决方案提供了优于传统命令式代码的优越代码度量。 阅读本文并了解如何使用具有功能组成的声明性代码成为更好的程序员。 在本文中,我们将仔细研究三个问题示例,并研究用于解决这些问题的两种不同技术&am…

高效的企业测试-单元和用例测试(2/6)

在本系列的第一部分中,我们看到了有效测试应满足的一些普遍适用的原则和约束。 在这一部分中,我们将仔细研究代码级单元测试以及组件或用例测试。 单元测试 单元测试验证单个单元(通常是类)的行为,而忽略或模拟该单元…

搜狗输入法更换字体与皮肤

图标上右键-更多-属性设置 效果: 注意:如果是新安装的字体,更换中文字体但其中列表没有显示,可以取消更换字体前面的对钩后,重新选择对钩,此时就显示新的中文字体了

javafx 8u40_JavaFX 8u20天的未来过去(始终在最前面)

javafx 8u40自从我发布有关JavaFX的主题以来已经有很长时间了。 因此,如果您仍在追随,那就太棒了! 介绍 在这篇博客文章中,我想写一篇关于从JavaFX 8 update 20开始的非常酷的功能的博客,该功能使您的应用程序始终位于…

如何在内存序列化中使用Java深克隆对象

在我以前的文章中,我解释了深度克隆和浅层克隆之间的区别 , 以及复制构造函数和防御性复制方法比默认的Java克隆更好。 使用复制构造函数和防御性复制方法进行的Java对象克隆当然具有某些优势,但是我们必须显式编写一些代码才能在所有这些方…

复制网页内容

问题背景: 当网页复制东西时,可能因为某些原因导致无法复制。可以用以下方法解决 解决方法: 1. 按下F12,出现以下内容 2. 依次点击右上角三个点,弹出界面后点击shortcuts 3. 选择首选项后,选中Disable …

插入时间信息

问题描述 在进行文本编辑的时候,往往需要记录当天日期。而Typora等软件没有及时插入时间的快捷方式。 方法 搜狗收入法提供快速记录时间的方式 1. 在中文输入法模式中输入rq(汉语拼音日期的首字母),选项卡自动显示今日日期,可…

activemq网络桥接_ActiveMQ –经纪人网络解释–第4部分

activemq网络桥接在前面的第3部分中 ,我们已经看到ActiveMQ如何帮助将远程使用者与本地使用者区分开来,这有助于确定从消息生产者到使用者的较短路径。 在第4部分中,我们将研究如何在远程代理上负载均衡并发使用者。 让我们考虑一些高级配置…

sublime 添加注释模块

问题背景: 规范的程序需要对函数进行注释,常用的开发工具如IDEA、VS Code都对注释模板有很好的支持。本博客介绍Sublime下支持模块注释功能的设置。 一 安装 一、安装方法 1.安装docblocker插件 mac CmdShiftP -> Install Package -> docblock…