Java:伪造工厂的闭包以创建域对象

最近,我们想要创建一个域对象,该对象需要具有外部依赖关系才能进行计算,并且希望能够在测试中解决该依赖关系。

最初,我们只是在领域类中新建依赖项,但这使得无法在测试中控制其值。

同样,我们似乎不应该将这种依赖关系传递到域对象的构造函数中,因为它不是定义对象的状态,而只是定义对象使用的状态。

我们最终得到了类似于以下代码的内容,其中将域对象作为内部类:

public class FooFactory {private final RandomService randomService;public FooFactory(RandomService randomService) {this.randomService = randomService;}public Foo createFoo(String bar, int baz) {return new Foo(bar, baz);}class Foo {private String bar;private int baz;public Foo(String bar, int baz) {this.bar = bar;this.baz = baz;}public int awesomeStuff() {int random = randomService.random(bar, baz);return random * 3;}}
}

然后,对该代码的测试可能如下所示:

public class FooFactoryTest {@Testpublic void createsAFoo() {RandomService randomService = mock(RandomService.class);when(randomService.random("bar", 12)).thenReturn(13);FooFactory.Foo foo = new FooFactory(randomService).createFoo("bar", 12);assertThat(foo.awesomeStuff(), equalTo(39));}
}

解决该问题的方法有点冗长,但似乎工作得很好。

参考: Java:伪造工厂的闭包以从我们的JCG合作伙伴 创建域对象   Mark Needham博客上的 Markh Needham。


翻译自: https://www.javacodegeeks.com/2012/03/java-faking-closure-with-factory-to.html

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

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

相关文章

利用scp 远程上传下载文件/文件夹

利用scp传输文件 1、从服务器下载文件 scp usernameservername:/path/filename /tmp/local_destination 例如scp codinglog192.168.0.101:/home/kimi/test.txt 把192.168.0.101上的/home/kimi/test.txt 的文件下载到 /tmp/local_destination 2、上传本地文件到服务器 scp /…

KEIL编译错误总结:

1 expected an identifier:#define宏定义常量后,如果再用前面定义的常量作为枚举常量就会报错,方法,去掉#define宏定义 2 ERROR L118: REFERENCE MADE TO ERRONEOUS EXTERNAL 定义的变量和外部声明调用的变量存储类型不一致&#…

视觉平衡与物理平衡_设计中的平衡理论为什么这么重要?

原标题:设计中的平衡理论为什么这么重要?在平面设计中很重要的理论就是关于平衡的应用。无论在logo设计还是网页设计还是海报设计中,一个好的设计一定会兼顾视觉的平衡。今天123标志网就跟大家一起看看平衡的力量。构图平衡主要意味着调整设计…

Tomcat、JDK 历史版本下载地址

Tomcat 历史版本下载地址http://archive.apache.org/dist/tomcat/ JDK 历史版本下载地址 https://www.oracle.com/technetwork/java/javase/archive-139210.html 个人博客:学习园 原文地址:http://www.xuexiyuan.cn/article/detail/190.html

JavaFX移动应用程序最佳实践,第2部分

警告:我在这里给出的技巧对于JavaFX Mobile的当前版本是正确的,该版本是JavaFX 1.1 SDK的一部分。 在将来的版本中,行为将改变,上述工件的当前不良性能将被优化或至少得到显着改善。 我在这里写的所有内容都是快照,不应…

14软件工程第一次作业

你认为一些军事方面的软件系统采用什么样的开发模型比较合适? 我认为设计军事方面的软件采用螺旋式的开发模型比较好。因为螺旋模型减少了过多测试或者是测试不足所带来的风险,能够使软件在无法排除重大风险时有机会停止,减少损失。对于军事方…

波纹扩散_C4D_动画amp;RS波纹扩散效果J_014

C4D-效果扩散效果,Redshift混合冰材质;利用顶点贴图扩散效果制作,RS混合调用顶点贴图。视频教程时长22分钟。对象为可编辑对象才能用顶点贴图。冰结域的扩展是这个动画的重点,在这个模式下,权重会根据半径向外扩展&…

软件测试工程师简历项目经验怎么写?--9999个已成功入职的软件测试工程师真实简历

简历是我们求职的第一步,也是非常重要的一步。 青云叔叔看过太多简历,最快3秒就淘汰一份简历,因为其实我们每天要收到很多简历进行筛选,那么面试官其实也是会很快进行对简历进行判断的,如果你对简历写的一塌糊涂&…

【poj2464】树状数组

这道题。。太特么多细节了。。 题意:在平面直角坐标系中给你N个点,stan和ollie玩一个游戏,首先stan在竖直方向上画一条直线,该直线必须要过其中的某个点,然后ollie在水平方向上画一条直线,该直线的要求是要…

mkdir -p命令

如果要创建目录A并创建目录A的子目录B,没有用-p的情况下mkdir 逐个的创建目录(mkdir A && mkdir A/B); 如果用-p 可以直接创建2个目录 mkdir -p A/B(如果父目录A不存在就创建); 来自个人博客: http://www.xuexiyuan.cn/article/detail/182.html

Eclipse在过去十年中的主要成就

正如我所写的那样 ,Eclipse在11月庆祝了10年来的开源和社区。 Eclipse社区已经形成了许多里程碑 ,但是主要成就是什么? Eclipse为实际改变软件行业做了什么? 这是Eclipse的一些关键成就。 1.主导的Java IDE。 Eclipse最初是一个非…

azure git怎么使用_Azure(一)Azure Traffic Manager为我们的Web项目提供负载均衡

一,引言上一篇讲到我们将自己的Net Core Web 项目部署到 Azure 的 Web App 的一项 pass 服务,假如随着项目的日益增长的访问量,之前部署到单节点的应用可能无法保证其稳定性,可能会导致系统宕机等等问题,这个时候&…

hiho1257 Snake Carpet

题目链接:http://hihocoder.com/problemset/problem/1257 题目大意:有n条蛇 编号为1-n 每条蛇的长度跟编号相等 奇数编号的蛇必须拐奇数次(除了第一条)偶数编号的蛇必须拐偶数次(除了第二条)问能不能在这种…

POJ 3680_Intervals

题意: 给定区间和该区间对应的权值,挑选一些区间,求使得每个数都不被K个区间覆盖的最大权值和。 分析: 如果K1,即为区间图的最大权独立集问题。可以对区间所有端点排序后利用动态规划的方法,设dp[i]为只考虑…

MongoDB 数据类型查询——$type使用

在MongoDB中根据字段的数量类型来查询数据使用$type操作符来实现,具体使用法语:1db.集合名.find({$type:类型值}) //这里的类型值能使用Number也能使用alias举个例子:12db.person.find({address:{$type:2}}) //查询address字段数据…

Spring和JSF集成:MVC螺母和螺栓

过去,我曾尝试将JSF与Spring MVC集成在一起,尽管我的第一次尝试成功了,但这远非理想。 这次,我决定做出一些关键决定来帮助我集中精力: 向后兼容。 支持JSF 1.2涉及的工作太多,而Spring 3.1中出现了太多的好…

文字描边_如何在网页里实现文字描边效果

文字描边想要在网页里实现文本描边效果,在以前只能使用Photoshop等来实现,但现在只需要一个text-stroke属性,即可轻松做到文本描边,渐变文本描边,甚至图片文本描边。01语法text-stroke: text-stroke是一个复合属性&…

javascript数据结构-栈

github博客地址 栈(stack)又名堆栈,它是一种运算受限的线性表。遵循后进先出原则,像垃圾桶似的。功能实现依然按照增删改查来进行,内部数据存储可以借用语言原生支持的数组。 栈类 function Stack(){this.data []; }添…

MongoDB 字符串值长度条件查询

在实际项目中常常会有根据字段值长度大小进行限制查询,例如查询商品名称过长或过短的商品信息,具体的实现方式可能有多种,在此记录常见的两种实现使用 $where 查询(性能稍逊一些)12345//查询商品名称长度大于25个字符的…

虚拟化Java应用程序:最佳实践(JavaOne 2011)

贾斯汀穆雷(Justin Murray)早五分钟就开始了他的演讲[“虚拟化Java应用程序:最佳实践”(21860)],并说虚拟化已经到了人们不再需要担心利用虚拟化的地步。 他说他的演讲大约有一年的历史,是一个团…